gmp (6.3.0)

(root)/
include/
gmp.h
       1  /* Definitions for GNU multiple precision functions.   -*- mode: c -*-
       2  
       3  Copyright 1991, 1993-1997, 1999-2016, 2020, 2021 Free Software
       4  Foundation, Inc.
       5  
       6  This file is part of the GNU MP Library.
       7  
       8  The GNU MP Library is free software; you can redistribute it and/or modify
       9  it under the terms of either:
      10  
      11    * the GNU Lesser General Public License as published by the Free
      12      Software Foundation; either version 3 of the License, or (at your
      13      option) any later version.
      14  
      15  or
      16  
      17    * the GNU General Public License as published by the Free Software
      18      Foundation; either version 2 of the License, or (at your option) any
      19      later version.
      20  
      21  or both in parallel, as here.
      22  
      23  The GNU MP Library is distributed in the hope that it will be useful, but
      24  WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
      25  or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
      26  for more details.
      27  
      28  You should have received copies of the GNU General Public License and the
      29  GNU Lesser General Public License along with the GNU MP Library.  If not,
      30  see https://www.gnu.org/licenses/.  */
      31  
      32  #ifndef __GMP_H__
      33  
      34  #if defined (__cplusplus)
      35  #include <iosfwd>   /* for std::istream, std::ostream, std::string */
      36  #include <cstdio>
      37  #endif
      38  
      39  
      40  /* Instantiated by configure. */
      41  #if ! defined (__GMP_WITHIN_CONFIGURE)
      42  #define __GMP_HAVE_HOST_CPU_FAMILY_power   0
      43  #define __GMP_HAVE_HOST_CPU_FAMILY_powerpc 0
      44  #define GMP_LIMB_BITS                      64
      45  #define GMP_NAIL_BITS                      0
      46  #endif
      47  #define GMP_NUMB_BITS     (GMP_LIMB_BITS - GMP_NAIL_BITS)
      48  #define GMP_NUMB_MASK     ((~ __GMP_CAST (mp_limb_t, 0)) >> GMP_NAIL_BITS)
      49  #define GMP_NUMB_MAX      GMP_NUMB_MASK
      50  #define GMP_NAIL_MASK     (~ GMP_NUMB_MASK)
      51  
      52  
      53  #ifndef __GNU_MP__
      54  #define __GNU_MP__ 6
      55  
      56  #include <stddef.h>    /* for size_t */
      57  #include <limits.h>
      58  
      59  /* Instantiated by configure. */
      60  #if ! defined (__GMP_WITHIN_CONFIGURE)
      61  /* #undef _LONG_LONG_LIMB */
      62  #define __GMP_LIBGMP_DLL  0
      63  #endif
      64  
      65  
      66  /* __GMP_DECLSPEC supports Windows DLL versions of libgmp, and is empty in
      67     all other circumstances.
      68  
      69     When compiling objects for libgmp, __GMP_DECLSPEC is an export directive,
      70     or when compiling for an application it's an import directive.  The two
      71     cases are differentiated by __GMP_WITHIN_GMP defined by the GMP Makefiles
      72     (and not defined from an application).
      73  
      74     __GMP_DECLSPEC_XX is similarly used for libgmpxx.  __GMP_WITHIN_GMPXX
      75     indicates when building libgmpxx, and in that case libgmpxx functions are
      76     exports, but libgmp functions which might get called are imports.
      77  
      78     Libtool DLL_EXPORT define is not used.
      79  
      80     There's no attempt to support GMP built both static and DLL.  Doing so
      81     would mean applications would have to tell us which of the two is going
      82     to be used when linking, and that seems very tedious and error prone if
      83     using GMP by hand, and equally tedious from a package since autoconf and
      84     automake don't give much help.
      85  
      86     __GMP_DECLSPEC is required on all documented global functions and
      87     variables, the various internals in gmp-impl.h etc can be left unadorned.
      88     But internals used by the test programs or speed measuring programs
      89     should have __GMP_DECLSPEC, and certainly constants or variables must
      90     have it or the wrong address will be resolved.
      91  
      92     In gcc __declspec can go at either the start or end of a prototype.
      93  
      94     In Microsoft C __declspec must go at the start, or after the type like
      95     void __declspec(...) *foo()".  There's no __dllexport or anything to
      96     guard against someone foolish #defining dllexport.  _export used to be
      97     available, but no longer.
      98  
      99     In Borland C _export still exists, but needs to go after the type, like
     100     "void _export foo();".  Would have to change the __GMP_DECLSPEC syntax to
     101     make use of that.  Probably more trouble than it's worth.  */
     102  
     103  #if defined (__GNUC__)
     104  #define __GMP_DECLSPEC_EXPORT  __declspec(__dllexport__)
     105  #define __GMP_DECLSPEC_IMPORT  __declspec(__dllimport__)
     106  #endif
     107  #if defined (_MSC_VER) || defined (__BORLANDC__)
     108  #define __GMP_DECLSPEC_EXPORT  __declspec(dllexport)
     109  #define __GMP_DECLSPEC_IMPORT  __declspec(dllimport)
     110  #endif
     111  #ifdef __WATCOMC__
     112  #define __GMP_DECLSPEC_EXPORT  __export
     113  #define __GMP_DECLSPEC_IMPORT  __import
     114  #endif
     115  #ifdef __IBMC__
     116  #define __GMP_DECLSPEC_EXPORT  _Export
     117  #define __GMP_DECLSPEC_IMPORT  _Import
     118  #endif
     119  
     120  #if __GMP_LIBGMP_DLL
     121  #ifdef __GMP_WITHIN_GMP
     122  /* compiling to go into a DLL libgmp */
     123  #define __GMP_DECLSPEC  __GMP_DECLSPEC_EXPORT
     124  #else
     125  /* compiling to go into an application which will link to a DLL libgmp */
     126  #define __GMP_DECLSPEC  __GMP_DECLSPEC_IMPORT
     127  #endif
     128  #else
     129  /* all other cases */
     130  #define __GMP_DECLSPEC
     131  #endif
     132  
     133  
     134  #ifdef __GMP_SHORT_LIMB
     135  typedef unsigned int		mp_limb_t;
     136  typedef int			mp_limb_signed_t;
     137  #else
     138  #ifdef _LONG_LONG_LIMB
     139  typedef unsigned long long int	mp_limb_t;
     140  typedef long long int		mp_limb_signed_t;
     141  #else
     142  typedef unsigned long int	mp_limb_t;
     143  typedef long int		mp_limb_signed_t;
     144  #endif
     145  #endif
     146  typedef unsigned long int	mp_bitcnt_t;
     147  
     148  /* For reference, note that the name __mpz_struct gets into C++ mangled
     149     function names, which means although the "__" suggests an internal, we
     150     must leave this name for binary compatibility.  */
     151  typedef struct
     152  {
     153    int _mp_alloc;		/* Number of *limbs* allocated and pointed
     154  				   to by the _mp_d field.  */
     155    int _mp_size;			/* abs(_mp_size) is the number of limbs the
     156  				   last field points to.  If _mp_size is
     157  				   negative this is a negative number.  */
     158    mp_limb_t *_mp_d;		/* Pointer to the limbs.  */
     159  } __mpz_struct;
     160  
     161  #endif /* __GNU_MP__ */
     162  
     163  
     164  typedef __mpz_struct MP_INT;    /* gmp 1 source compatibility */
     165  typedef __mpz_struct mpz_t[1];
     166  
     167  typedef mp_limb_t *		mp_ptr;
     168  typedef const mp_limb_t *	mp_srcptr;
     169  #if defined (_CRAY) && ! defined (_CRAYMPP)
     170  /* plain `int' is much faster (48 bits) */
     171  #define __GMP_MP_SIZE_T_INT     1
     172  typedef int			mp_size_t;
     173  typedef int			mp_exp_t;
     174  #else
     175  #define __GMP_MP_SIZE_T_INT     0
     176  typedef long int		mp_size_t;
     177  typedef long int		mp_exp_t;
     178  #endif
     179  
     180  typedef struct
     181  {
     182    __mpz_struct _mp_num;
     183    __mpz_struct _mp_den;
     184  } __mpq_struct;
     185  
     186  typedef __mpq_struct MP_RAT;    /* gmp 1 source compatibility */
     187  typedef __mpq_struct mpq_t[1];
     188  
     189  typedef struct
     190  {
     191    int _mp_prec;			/* Max precision, in number of `mp_limb_t's.
     192  				   Set by mpf_init and modified by
     193  				   mpf_set_prec.  The area pointed to by the
     194  				   _mp_d field contains `prec' + 1 limbs.  */
     195    int _mp_size;			/* abs(_mp_size) is the number of limbs the
     196  				   last field points to.  If _mp_size is
     197  				   negative this is a negative number.  */
     198    mp_exp_t _mp_exp;		/* Exponent, in the base of `mp_limb_t'.  */
     199    mp_limb_t *_mp_d;		/* Pointer to the limbs.  */
     200  } __mpf_struct;
     201  
     202  /* typedef __mpf_struct MP_FLOAT; */
     203  typedef __mpf_struct mpf_t[1];
     204  
     205  /* Available random number generation algorithms.  */
     206  typedef enum
     207  {
     208    GMP_RAND_ALG_DEFAULT = 0,
     209    GMP_RAND_ALG_LC = GMP_RAND_ALG_DEFAULT /* Linear congruential.  */
     210  } gmp_randalg_t;
     211  
     212  /* Random state struct.  */
     213  typedef struct
     214  {
     215    mpz_t _mp_seed;	  /* _mp_d member points to state of the generator. */
     216    gmp_randalg_t _mp_alg;  /* Currently unused. */
     217    union {
     218      void *_mp_lc;         /* Pointer to function pointers structure.  */
     219    } _mp_algdata;
     220  } __gmp_randstate_struct;
     221  typedef __gmp_randstate_struct gmp_randstate_t[1];
     222  
     223  /* Types for function declarations in gmp files.  */
     224  /* ??? Should not pollute user name space with these ??? */
     225  typedef const __mpz_struct *mpz_srcptr;
     226  typedef __mpz_struct *mpz_ptr;
     227  typedef const __mpf_struct *mpf_srcptr;
     228  typedef __mpf_struct *mpf_ptr;
     229  typedef const __mpq_struct *mpq_srcptr;
     230  typedef __mpq_struct *mpq_ptr;
     231  typedef __gmp_randstate_struct *gmp_randstate_ptr;
     232  typedef const __gmp_randstate_struct *gmp_randstate_srcptr;
     233  
     234  
     235  #if __GMP_LIBGMP_DLL
     236  #ifdef __GMP_WITHIN_GMPXX
     237  /* compiling to go into a DLL libgmpxx */
     238  #define __GMP_DECLSPEC_XX  __GMP_DECLSPEC_EXPORT
     239  #else
     240  /* compiling to go into a application which will link to a DLL libgmpxx */
     241  #define __GMP_DECLSPEC_XX  __GMP_DECLSPEC_IMPORT
     242  #endif
     243  #else
     244  /* all other cases */
     245  #define __GMP_DECLSPEC_XX
     246  #endif
     247  
     248  
     249  #ifndef __MPN
     250  #define __MPN(x) __gmpn_##x
     251  #endif
     252  
     253  /* For reference, "defined(EOF)" cannot be used here.  In g++ 2.95.4,
     254     <iostream> defines EOF but not FILE.  */
     255  #if defined (FILE)                                              \
     256    || defined (H_STDIO)                                          \
     257    || defined (_H_STDIO)               /* AIX */                 \
     258    || defined (_STDIO_H)               /* glibc, Sun, SCO */     \
     259    || defined (_STDIO_H_)              /* BSD, OSF */            \
     260    || defined (__STDIO_H)              /* Borland */             \
     261    || defined (__STDIO_H__)            /* IRIX */                \
     262    || defined (_STDIO_INCLUDED)        /* HPUX */                \
     263    || defined (__dj_include_stdio_h_)  /* DJGPP */               \
     264    || defined (_FILE_DEFINED)          /* Microsoft */           \
     265    || defined (__STDIO__)              /* Apple MPW MrC */       \
     266    || defined (_MSL_STDIO_H)           /* Metrowerks */          \
     267    || defined (_STDIO_H_INCLUDED)      /* QNX4 */		\
     268    || defined (_ISO_STDIO_ISO_H)       /* Sun C++ */		\
     269    || defined (__STDIO_LOADED)         /* VMS */			\
     270    || defined (_STDIO)                 /* HPE NonStop */         \
     271    || defined (__DEFINED_FILE)         /* musl */
     272  #define _GMP_H_HAVE_FILE 1
     273  #endif
     274  
     275  /* In ISO C, if a prototype involving "struct obstack *" is given without
     276     that structure defined, then the struct is scoped down to just the
     277     prototype, causing a conflict if it's subsequently defined for real.  So
     278     only give prototypes if we've got obstack.h.  */
     279  #if defined (_OBSTACK_H)   /* glibc <obstack.h> */
     280  #define _GMP_H_HAVE_OBSTACK 1
     281  #endif
     282  
     283  /* The prototypes for gmp_vprintf etc are provided only if va_list is defined,
     284     via an application having included <stdarg.h>.  Usually va_list is a typedef
     285     so can't be tested directly, but C99 specifies that va_start is a macro.
     286  
     287     <stdio.h> will define some sort of va_list for vprintf and vfprintf, but
     288     let's not bother trying to use that since it's not standard and since
     289     application uses for gmp_vprintf etc will almost certainly require the
     290     whole <stdarg.h> anyway.  */
     291  
     292  #ifdef va_start
     293  #define _GMP_H_HAVE_VA_LIST 1
     294  #endif
     295  
     296  /* Test for gcc >= maj.min, as per __GNUC_PREREQ in glibc */
     297  #if defined (__GNUC__) && defined (__GNUC_MINOR__)
     298  #define __GMP_GNUC_PREREQ(maj, min) \
     299    ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
     300  #else
     301  #define __GMP_GNUC_PREREQ(maj, min)  0
     302  #endif
     303  
     304  /* "pure" is in gcc 2.96 and up, see "(gcc)Function Attributes".  Basically
     305     it means a function does nothing but examine its arguments and memory
     306     (global or via arguments) to generate a return value, but changes nothing
     307     and has no side-effects.  __GMP_NO_ATTRIBUTE_CONST_PURE lets
     308     tune/common.c etc turn this off when trying to write timing loops.  */
     309  #if __GMP_GNUC_PREREQ (2,96) && ! defined (__GMP_NO_ATTRIBUTE_CONST_PURE)
     310  #define __GMP_ATTRIBUTE_PURE   __attribute__ ((__pure__))
     311  #else
     312  #define __GMP_ATTRIBUTE_PURE
     313  #endif
     314  
     315  
     316  /* __GMP_CAST allows us to use static_cast in C++, so our macros are clean
     317     to "g++ -Wold-style-cast".
     318  
     319     Casts in "extern inline" code within an extern "C" block don't induce
     320     these warnings, so __GMP_CAST only needs to be used on documented
     321     macros.  */
     322  
     323  #ifdef __cplusplus
     324  #define __GMP_CAST(type, expr)  (static_cast<type> (expr))
     325  #else
     326  #define __GMP_CAST(type, expr)  ((type) (expr))
     327  #endif
     328  
     329  
     330  /* An empty "throw ()" means the function doesn't throw any C++ exceptions,
     331     this can save some stack frame info in applications.
     332  
     333     Currently it's given only on functions which never divide-by-zero etc,
     334     don't allocate memory, and are expected to never need to allocate memory.
     335     This leaves open the possibility of a C++ throw from a future GMP
     336     exceptions scheme.
     337  
     338     mpz_set_ui etc are omitted to leave open the lazy allocation scheme
     339     described in doc/tasks.html.  mpz_get_d etc are omitted to leave open
     340     exceptions for float overflows.
     341  
     342     Note that __GMP_NOTHROW must be given on any inlines the same as on their
     343     prototypes (for g++ at least, where they're used together).  Note also
     344     that g++ 3.0 demands that __GMP_NOTHROW is before other attributes like
     345     __GMP_ATTRIBUTE_PURE.  */
     346  
     347  #if defined (__cplusplus)
     348  #if __cplusplus >= 201103L
     349  #define __GMP_NOTHROW  noexcept
     350  #else
     351  #define __GMP_NOTHROW  throw ()
     352  #endif
     353  #else
     354  #define __GMP_NOTHROW
     355  #endif
     356  
     357  
     358  /* PORTME: What other compilers have a useful "extern inline"?  "static
     359     inline" would be an acceptable substitute if the compiler (or linker)
     360     discards unused statics.  */
     361  
     362   /* gcc has __inline__ in all modes, including strict ansi.  Give a prototype
     363      for an inline too, so as to correctly specify "dllimport" on windows, in
     364      case the function is called rather than inlined.
     365      GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99
     366      inline semantics, unless -fgnu89-inline is used.  */
     367  #ifdef __GNUC__
     368  #if (defined __GNUC_STDC_INLINE__) || (__GNUC__ == 4 && __GNUC_MINOR__ == 2) \
     369    || (defined __GNUC_GNU_INLINE__ && defined __cplusplus)
     370  #define __GMP_EXTERN_INLINE extern __inline__ __attribute__ ((__gnu_inline__))
     371  #else
     372  #define __GMP_EXTERN_INLINE      extern __inline__
     373  #endif
     374  #define __GMP_INLINE_PROTOTYPES  1
     375  #endif
     376  
     377  /* DEC C (eg. version 5.9) supports "static __inline foo()", even in -std1
     378     strict ANSI mode.  Inlining is done even when not optimizing (ie. -O0
     379     mode, which is the default), but an unnecessary local copy of foo is
     380     emitted unless -O is used.  "extern __inline" is accepted, but the
     381     "extern" appears to be ignored, ie. it becomes a plain global function
     382     but which is inlined within its file.  Don't know if all old versions of
     383     DEC C supported __inline, but as a start let's do the right thing for
     384     current versions.  */
     385  #ifdef __DECC
     386  #define __GMP_EXTERN_INLINE  static __inline
     387  #endif
     388  
     389  /* SCO OpenUNIX 8 cc supports "static inline foo()" but not in -Xc strict
     390     ANSI mode (__STDC__ is 1 in that mode).  Inlining only actually takes
     391     place under -O.  Without -O "foo" seems to be emitted whether it's used
     392     or not, which is wasteful.  "extern inline foo()" isn't useful, the
     393     "extern" is apparently ignored, so foo is inlined if possible but also
     394     emitted as a global, which causes multiple definition errors when
     395     building a shared libgmp.  */
     396  #ifdef __SCO_VERSION__
     397  #if __SCO_VERSION__ > 400000000 && __STDC__ != 1 \
     398    && ! defined (__GMP_EXTERN_INLINE)
     399  #define __GMP_EXTERN_INLINE  static inline
     400  #endif
     401  #endif
     402  
     403  /* Microsoft's C compiler accepts __inline */
     404  #ifdef _MSC_VER
     405  #define __GMP_EXTERN_INLINE  __inline
     406  #endif
     407  
     408  /* Recent enough Sun C compilers want "inline" */
     409  #if defined (__SUNPRO_C) && __SUNPRO_C >= 0x560 \
     410    && ! defined (__GMP_EXTERN_INLINE)
     411  #define __GMP_EXTERN_INLINE  inline
     412  #endif
     413  
     414  /* Somewhat older Sun C compilers want "static inline" */
     415  #if defined (__SUNPRO_C) && __SUNPRO_C >= 0x540 \
     416    && ! defined (__GMP_EXTERN_INLINE)
     417  #define __GMP_EXTERN_INLINE  static inline
     418  #endif
     419  
     420  
     421  /* C++ always has "inline" and since it's a normal feature the linker should
     422     discard duplicate non-inlined copies, or if it doesn't then that's a
     423     problem for everyone, not just GMP.  */
     424  #if defined (__cplusplus) && ! defined (__GMP_EXTERN_INLINE)
     425  #define __GMP_EXTERN_INLINE  inline
     426  #endif
     427  
     428  /* Don't do any inlining within a configure run, since if the compiler ends
     429     up emitting copies of the code into the object file it can end up
     430     demanding the various support routines (like mpn_popcount) for linking,
     431     making the "alloca" test and perhaps others fail.  And on hppa ia64 a
     432     pre-release gcc 3.2 was seen not respecting the "extern" in "extern
     433     __inline__", triggering this problem too.  */
     434  #if defined (__GMP_WITHIN_CONFIGURE) && ! __GMP_WITHIN_CONFIGURE_INLINE
     435  #undef __GMP_EXTERN_INLINE
     436  #endif
     437  
     438  /* By default, don't give a prototype when there's going to be an inline
     439     version.  Note in particular that Cray C++ objects to the combination of
     440     prototype and inline.  */
     441  #ifdef __GMP_EXTERN_INLINE
     442  #ifndef __GMP_INLINE_PROTOTYPES
     443  #define __GMP_INLINE_PROTOTYPES  0
     444  #endif
     445  #else
     446  #define __GMP_INLINE_PROTOTYPES  1
     447  #endif
     448  
     449  
     450  #define __GMP_ABS(x)   ((x) >= 0 ? (x) : -(x))
     451  #define __GMP_MAX(h,i) ((h) > (i) ? (h) : (i))
     452  
     453  
     454  /* __builtin_expect is in gcc 3.0, and not in 2.95. */
     455  #if __GMP_GNUC_PREREQ (3,0)
     456  #define __GMP_LIKELY(cond)    __builtin_expect ((cond) != 0, 1)
     457  #define __GMP_UNLIKELY(cond)  __builtin_expect ((cond) != 0, 0)
     458  #else
     459  #define __GMP_LIKELY(cond)    (cond)
     460  #define __GMP_UNLIKELY(cond)  (cond)
     461  #endif
     462  
     463  #ifdef _CRAY
     464  #define __GMP_CRAY_Pragma(str)  _Pragma (str)
     465  #else
     466  #define __GMP_CRAY_Pragma(str)
     467  #endif
     468  
     469  
     470  /* Allow direct user access to numerator and denominator of an mpq_t object.  */
     471  #define mpq_numref(Q) (&((Q)->_mp_num))
     472  #define mpq_denref(Q) (&((Q)->_mp_den))
     473  
     474  
     475  #if defined (__cplusplus)
     476  extern "C" {
     477  using std::FILE;
     478  #endif
     479  
     480  #define mp_set_memory_functions __gmp_set_memory_functions
     481  __GMP_DECLSPEC void mp_set_memory_functions (void *(*) (size_t),
     482  				      void *(*) (void *, size_t, size_t),
     483  				      void (*) (void *, size_t)) __GMP_NOTHROW;
     484  
     485  #define mp_get_memory_functions __gmp_get_memory_functions
     486  __GMP_DECLSPEC void mp_get_memory_functions (void *(**) (size_t),
     487  				      void *(**) (void *, size_t, size_t),
     488  				      void (**) (void *, size_t)) __GMP_NOTHROW;
     489  
     490  #define mp_bits_per_limb __gmp_bits_per_limb
     491  __GMP_DECLSPEC extern const int mp_bits_per_limb;
     492  
     493  #define gmp_errno __gmp_errno
     494  __GMP_DECLSPEC extern int gmp_errno;
     495  
     496  #define gmp_version __gmp_version
     497  __GMP_DECLSPEC extern const char * const gmp_version;
     498  
     499  
     500  /**************** Random number routines.  ****************/
     501  
     502  /* obsolete */
     503  #define gmp_randinit __gmp_randinit
     504  __GMP_DECLSPEC void gmp_randinit (gmp_randstate_ptr, gmp_randalg_t, ...);
     505  
     506  #define gmp_randinit_default __gmp_randinit_default
     507  __GMP_DECLSPEC void gmp_randinit_default (gmp_randstate_ptr);
     508  
     509  #define gmp_randinit_lc_2exp __gmp_randinit_lc_2exp
     510  __GMP_DECLSPEC void gmp_randinit_lc_2exp (gmp_randstate_ptr, mpz_srcptr, unsigned long int, mp_bitcnt_t);
     511  
     512  #define gmp_randinit_lc_2exp_size __gmp_randinit_lc_2exp_size
     513  __GMP_DECLSPEC int gmp_randinit_lc_2exp_size (gmp_randstate_ptr, mp_bitcnt_t);
     514  
     515  #define gmp_randinit_mt __gmp_randinit_mt
     516  __GMP_DECLSPEC void gmp_randinit_mt (gmp_randstate_ptr);
     517  
     518  #define gmp_randinit_set __gmp_randinit_set
     519  __GMP_DECLSPEC void gmp_randinit_set (gmp_randstate_ptr, gmp_randstate_srcptr);
     520  
     521  #define gmp_randseed __gmp_randseed
     522  __GMP_DECLSPEC void gmp_randseed (gmp_randstate_ptr, mpz_srcptr);
     523  
     524  #define gmp_randseed_ui __gmp_randseed_ui
     525  __GMP_DECLSPEC void gmp_randseed_ui (gmp_randstate_ptr, unsigned long int);
     526  
     527  #define gmp_randclear __gmp_randclear
     528  __GMP_DECLSPEC void gmp_randclear (gmp_randstate_ptr);
     529  
     530  #define gmp_urandomb_ui __gmp_urandomb_ui
     531  __GMP_DECLSPEC unsigned long gmp_urandomb_ui (gmp_randstate_ptr, unsigned long);
     532  
     533  #define gmp_urandomm_ui __gmp_urandomm_ui
     534  __GMP_DECLSPEC unsigned long gmp_urandomm_ui (gmp_randstate_ptr, unsigned long);
     535  
     536  
     537  /**************** Formatted output routines.  ****************/
     538  
     539  #define gmp_asprintf __gmp_asprintf
     540  __GMP_DECLSPEC int gmp_asprintf (char **, const char *, ...);
     541  
     542  #define gmp_fprintf __gmp_fprintf
     543  #ifdef _GMP_H_HAVE_FILE
     544  __GMP_DECLSPEC int gmp_fprintf (FILE *, const char *, ...);
     545  #endif
     546  
     547  #define gmp_obstack_printf __gmp_obstack_printf
     548  #if defined (_GMP_H_HAVE_OBSTACK)
     549  __GMP_DECLSPEC int gmp_obstack_printf (struct obstack *, const char *, ...);
     550  #endif
     551  
     552  #define gmp_obstack_vprintf __gmp_obstack_vprintf
     553  #if defined (_GMP_H_HAVE_OBSTACK) && defined (_GMP_H_HAVE_VA_LIST)
     554  __GMP_DECLSPEC int gmp_obstack_vprintf (struct obstack *, const char *, va_list);
     555  #endif
     556  
     557  #define gmp_printf __gmp_printf
     558  __GMP_DECLSPEC int gmp_printf (const char *, ...);
     559  
     560  #define gmp_snprintf __gmp_snprintf
     561  __GMP_DECLSPEC int gmp_snprintf (char *, size_t, const char *, ...);
     562  
     563  #define gmp_sprintf __gmp_sprintf
     564  __GMP_DECLSPEC int gmp_sprintf (char *, const char *, ...);
     565  
     566  #define gmp_vasprintf __gmp_vasprintf
     567  #if defined (_GMP_H_HAVE_VA_LIST)
     568  __GMP_DECLSPEC int gmp_vasprintf (char **, const char *, va_list);
     569  #endif
     570  
     571  #define gmp_vfprintf __gmp_vfprintf
     572  #if defined (_GMP_H_HAVE_FILE) && defined (_GMP_H_HAVE_VA_LIST)
     573  __GMP_DECLSPEC int gmp_vfprintf (FILE *, const char *, va_list);
     574  #endif
     575  
     576  #define gmp_vprintf __gmp_vprintf
     577  #if defined (_GMP_H_HAVE_VA_LIST)
     578  __GMP_DECLSPEC int gmp_vprintf (const char *, va_list);
     579  #endif
     580  
     581  #define gmp_vsnprintf __gmp_vsnprintf
     582  #if defined (_GMP_H_HAVE_VA_LIST)
     583  __GMP_DECLSPEC int gmp_vsnprintf (char *, size_t, const char *, va_list);
     584  #endif
     585  
     586  #define gmp_vsprintf __gmp_vsprintf
     587  #if defined (_GMP_H_HAVE_VA_LIST)
     588  __GMP_DECLSPEC int gmp_vsprintf (char *, const char *, va_list);
     589  #endif
     590  
     591  
     592  /**************** Formatted input routines.  ****************/
     593  
     594  #define gmp_fscanf __gmp_fscanf
     595  #ifdef _GMP_H_HAVE_FILE
     596  __GMP_DECLSPEC int gmp_fscanf (FILE *, const char *, ...);
     597  #endif
     598  
     599  #define gmp_scanf __gmp_scanf
     600  __GMP_DECLSPEC int gmp_scanf (const char *, ...);
     601  
     602  #define gmp_sscanf __gmp_sscanf
     603  __GMP_DECLSPEC int gmp_sscanf (const char *, const char *, ...);
     604  
     605  #define gmp_vfscanf __gmp_vfscanf
     606  #if defined (_GMP_H_HAVE_FILE) && defined (_GMP_H_HAVE_VA_LIST)
     607  __GMP_DECLSPEC int gmp_vfscanf (FILE *, const char *, va_list);
     608  #endif
     609  
     610  #define gmp_vscanf __gmp_vscanf
     611  #if defined (_GMP_H_HAVE_VA_LIST)
     612  __GMP_DECLSPEC int gmp_vscanf (const char *, va_list);
     613  #endif
     614  
     615  #define gmp_vsscanf __gmp_vsscanf
     616  #if defined (_GMP_H_HAVE_VA_LIST)
     617  __GMP_DECLSPEC int gmp_vsscanf (const char *, const char *, va_list);
     618  #endif
     619  
     620  
     621  /**************** Integer (i.e. Z) routines.  ****************/
     622  
     623  #define _mpz_realloc __gmpz_realloc
     624  #define mpz_realloc __gmpz_realloc
     625  __GMP_DECLSPEC void *_mpz_realloc (mpz_ptr, mp_size_t);
     626  
     627  #define mpz_abs __gmpz_abs
     628  #if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpz_abs)
     629  __GMP_DECLSPEC void mpz_abs (mpz_ptr, mpz_srcptr);
     630  #endif
     631  
     632  #define mpz_add __gmpz_add
     633  __GMP_DECLSPEC void mpz_add (mpz_ptr, mpz_srcptr, mpz_srcptr);
     634  
     635  #define mpz_add_ui __gmpz_add_ui
     636  __GMP_DECLSPEC void mpz_add_ui (mpz_ptr, mpz_srcptr, unsigned long int);
     637  
     638  #define mpz_addmul __gmpz_addmul
     639  __GMP_DECLSPEC void mpz_addmul (mpz_ptr, mpz_srcptr, mpz_srcptr);
     640  
     641  #define mpz_addmul_ui __gmpz_addmul_ui
     642  __GMP_DECLSPEC void mpz_addmul_ui (mpz_ptr, mpz_srcptr, unsigned long int);
     643  
     644  #define mpz_and __gmpz_and
     645  __GMP_DECLSPEC void mpz_and (mpz_ptr, mpz_srcptr, mpz_srcptr);
     646  
     647  #define mpz_array_init __gmpz_array_init
     648  __GMP_DECLSPEC void mpz_array_init (mpz_ptr, mp_size_t, mp_size_t);
     649  
     650  #define mpz_bin_ui __gmpz_bin_ui
     651  __GMP_DECLSPEC void mpz_bin_ui (mpz_ptr, mpz_srcptr, unsigned long int);
     652  
     653  #define mpz_bin_uiui __gmpz_bin_uiui
     654  __GMP_DECLSPEC void mpz_bin_uiui (mpz_ptr, unsigned long int, unsigned long int);
     655  
     656  #define mpz_cdiv_q __gmpz_cdiv_q
     657  __GMP_DECLSPEC void mpz_cdiv_q (mpz_ptr, mpz_srcptr, mpz_srcptr);
     658  
     659  #define mpz_cdiv_q_2exp __gmpz_cdiv_q_2exp
     660  __GMP_DECLSPEC void mpz_cdiv_q_2exp (mpz_ptr, mpz_srcptr, mp_bitcnt_t);
     661  
     662  #define mpz_cdiv_q_ui __gmpz_cdiv_q_ui
     663  __GMP_DECLSPEC unsigned long int mpz_cdiv_q_ui (mpz_ptr, mpz_srcptr, unsigned long int);
     664  
     665  #define mpz_cdiv_qr __gmpz_cdiv_qr
     666  __GMP_DECLSPEC void mpz_cdiv_qr (mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr);
     667  
     668  #define mpz_cdiv_qr_ui __gmpz_cdiv_qr_ui
     669  __GMP_DECLSPEC unsigned long int mpz_cdiv_qr_ui (mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long int);
     670  
     671  #define mpz_cdiv_r __gmpz_cdiv_r
     672  __GMP_DECLSPEC void mpz_cdiv_r (mpz_ptr, mpz_srcptr, mpz_srcptr);
     673  
     674  #define mpz_cdiv_r_2exp __gmpz_cdiv_r_2exp
     675  __GMP_DECLSPEC void mpz_cdiv_r_2exp (mpz_ptr, mpz_srcptr, mp_bitcnt_t);
     676  
     677  #define mpz_cdiv_r_ui __gmpz_cdiv_r_ui
     678  __GMP_DECLSPEC unsigned long int mpz_cdiv_r_ui (mpz_ptr, mpz_srcptr, unsigned long int);
     679  
     680  #define mpz_cdiv_ui __gmpz_cdiv_ui
     681  __GMP_DECLSPEC unsigned long int mpz_cdiv_ui (mpz_srcptr, unsigned long int) __GMP_ATTRIBUTE_PURE;
     682  
     683  #define mpz_clear __gmpz_clear
     684  __GMP_DECLSPEC void mpz_clear (mpz_ptr);
     685  
     686  #define mpz_clears __gmpz_clears
     687  __GMP_DECLSPEC void mpz_clears (mpz_ptr, ...);
     688  
     689  #define mpz_clrbit __gmpz_clrbit
     690  __GMP_DECLSPEC void mpz_clrbit (mpz_ptr, mp_bitcnt_t);
     691  
     692  #define mpz_cmp __gmpz_cmp
     693  __GMP_DECLSPEC int mpz_cmp (mpz_srcptr, mpz_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE;
     694  
     695  #define mpz_cmp_d __gmpz_cmp_d
     696  __GMP_DECLSPEC int mpz_cmp_d (mpz_srcptr, double) __GMP_ATTRIBUTE_PURE;
     697  
     698  #define _mpz_cmp_si __gmpz_cmp_si
     699  __GMP_DECLSPEC int _mpz_cmp_si (mpz_srcptr, signed long int) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE;
     700  
     701  #define _mpz_cmp_ui __gmpz_cmp_ui
     702  __GMP_DECLSPEC int _mpz_cmp_ui (mpz_srcptr, unsigned long int) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE;
     703  
     704  #define mpz_cmpabs __gmpz_cmpabs
     705  __GMP_DECLSPEC int mpz_cmpabs (mpz_srcptr, mpz_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE;
     706  
     707  #define mpz_cmpabs_d __gmpz_cmpabs_d
     708  __GMP_DECLSPEC int mpz_cmpabs_d (mpz_srcptr, double) __GMP_ATTRIBUTE_PURE;
     709  
     710  #define mpz_cmpabs_ui __gmpz_cmpabs_ui
     711  __GMP_DECLSPEC int mpz_cmpabs_ui (mpz_srcptr, unsigned long int) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE;
     712  
     713  #define mpz_com __gmpz_com
     714  __GMP_DECLSPEC void mpz_com (mpz_ptr, mpz_srcptr);
     715  
     716  #define mpz_combit __gmpz_combit
     717  __GMP_DECLSPEC void mpz_combit (mpz_ptr, mp_bitcnt_t);
     718  
     719  #define mpz_congruent_p __gmpz_congruent_p
     720  __GMP_DECLSPEC int mpz_congruent_p (mpz_srcptr, mpz_srcptr, mpz_srcptr) __GMP_ATTRIBUTE_PURE;
     721  
     722  #define mpz_congruent_2exp_p __gmpz_congruent_2exp_p
     723  __GMP_DECLSPEC int mpz_congruent_2exp_p (mpz_srcptr, mpz_srcptr, mp_bitcnt_t) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE;
     724  
     725  #define mpz_congruent_ui_p __gmpz_congruent_ui_p
     726  __GMP_DECLSPEC int mpz_congruent_ui_p (mpz_srcptr, unsigned long, unsigned long) __GMP_ATTRIBUTE_PURE;
     727  
     728  #define mpz_divexact __gmpz_divexact
     729  __GMP_DECLSPEC void mpz_divexact (mpz_ptr, mpz_srcptr, mpz_srcptr);
     730  
     731  #define mpz_divexact_ui __gmpz_divexact_ui
     732  __GMP_DECLSPEC void mpz_divexact_ui (mpz_ptr, mpz_srcptr, unsigned long);
     733  
     734  #define mpz_divisible_p __gmpz_divisible_p
     735  __GMP_DECLSPEC int mpz_divisible_p (mpz_srcptr, mpz_srcptr) __GMP_ATTRIBUTE_PURE;
     736  
     737  #define mpz_divisible_ui_p __gmpz_divisible_ui_p
     738  __GMP_DECLSPEC int mpz_divisible_ui_p (mpz_srcptr, unsigned long) __GMP_ATTRIBUTE_PURE;
     739  
     740  #define mpz_divisible_2exp_p __gmpz_divisible_2exp_p
     741  __GMP_DECLSPEC int mpz_divisible_2exp_p (mpz_srcptr, mp_bitcnt_t) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE;
     742  
     743  #define mpz_dump __gmpz_dump
     744  __GMP_DECLSPEC void mpz_dump (mpz_srcptr);
     745  
     746  #define mpz_export __gmpz_export
     747  __GMP_DECLSPEC void *mpz_export (void *, size_t *, int, size_t, int, size_t, mpz_srcptr);
     748  
     749  #define mpz_fac_ui __gmpz_fac_ui
     750  __GMP_DECLSPEC void mpz_fac_ui (mpz_ptr, unsigned long int);
     751  
     752  #define mpz_2fac_ui __gmpz_2fac_ui
     753  __GMP_DECLSPEC void mpz_2fac_ui (mpz_ptr, unsigned long int);
     754  
     755  #define mpz_mfac_uiui __gmpz_mfac_uiui
     756  __GMP_DECLSPEC void mpz_mfac_uiui (mpz_ptr, unsigned long int, unsigned long int);
     757  
     758  #define mpz_primorial_ui __gmpz_primorial_ui
     759  __GMP_DECLSPEC void mpz_primorial_ui (mpz_ptr, unsigned long int);
     760  
     761  #define mpz_fdiv_q __gmpz_fdiv_q
     762  __GMP_DECLSPEC void mpz_fdiv_q (mpz_ptr, mpz_srcptr, mpz_srcptr);
     763  
     764  #define mpz_fdiv_q_2exp __gmpz_fdiv_q_2exp
     765  __GMP_DECLSPEC void mpz_fdiv_q_2exp (mpz_ptr, mpz_srcptr, mp_bitcnt_t);
     766  
     767  #define mpz_fdiv_q_ui __gmpz_fdiv_q_ui
     768  __GMP_DECLSPEC unsigned long int mpz_fdiv_q_ui (mpz_ptr, mpz_srcptr, unsigned long int);
     769  
     770  #define mpz_fdiv_qr __gmpz_fdiv_qr
     771  __GMP_DECLSPEC void mpz_fdiv_qr (mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr);
     772  
     773  #define mpz_fdiv_qr_ui __gmpz_fdiv_qr_ui
     774  __GMP_DECLSPEC unsigned long int mpz_fdiv_qr_ui (mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long int);
     775  
     776  #define mpz_fdiv_r __gmpz_fdiv_r
     777  __GMP_DECLSPEC void mpz_fdiv_r (mpz_ptr, mpz_srcptr, mpz_srcptr);
     778  
     779  #define mpz_fdiv_r_2exp __gmpz_fdiv_r_2exp
     780  __GMP_DECLSPEC void mpz_fdiv_r_2exp (mpz_ptr, mpz_srcptr, mp_bitcnt_t);
     781  
     782  #define mpz_fdiv_r_ui __gmpz_fdiv_r_ui
     783  __GMP_DECLSPEC unsigned long int mpz_fdiv_r_ui (mpz_ptr, mpz_srcptr, unsigned long int);
     784  
     785  #define mpz_fdiv_ui __gmpz_fdiv_ui
     786  __GMP_DECLSPEC unsigned long int mpz_fdiv_ui (mpz_srcptr, unsigned long int) __GMP_ATTRIBUTE_PURE;
     787  
     788  #define mpz_fib_ui __gmpz_fib_ui
     789  __GMP_DECLSPEC void mpz_fib_ui (mpz_ptr, unsigned long int);
     790  
     791  #define mpz_fib2_ui __gmpz_fib2_ui
     792  __GMP_DECLSPEC void mpz_fib2_ui (mpz_ptr, mpz_ptr, unsigned long int);
     793  
     794  #define mpz_fits_sint_p __gmpz_fits_sint_p
     795  __GMP_DECLSPEC int mpz_fits_sint_p (mpz_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE;
     796  
     797  #define mpz_fits_slong_p __gmpz_fits_slong_p
     798  __GMP_DECLSPEC int mpz_fits_slong_p (mpz_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE;
     799  
     800  #define mpz_fits_sshort_p __gmpz_fits_sshort_p
     801  __GMP_DECLSPEC int mpz_fits_sshort_p (mpz_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE;
     802  
     803  #define mpz_fits_uint_p __gmpz_fits_uint_p
     804  #if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpz_fits_uint_p)
     805  __GMP_DECLSPEC int mpz_fits_uint_p (mpz_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE;
     806  #endif
     807  
     808  #define mpz_fits_ulong_p __gmpz_fits_ulong_p
     809  #if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpz_fits_ulong_p)
     810  __GMP_DECLSPEC int mpz_fits_ulong_p (mpz_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE;
     811  #endif
     812  
     813  #define mpz_fits_ushort_p __gmpz_fits_ushort_p
     814  #if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpz_fits_ushort_p)
     815  __GMP_DECLSPEC int mpz_fits_ushort_p (mpz_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE;
     816  #endif
     817  
     818  #define mpz_gcd __gmpz_gcd
     819  __GMP_DECLSPEC void mpz_gcd (mpz_ptr, mpz_srcptr, mpz_srcptr);
     820  
     821  #define mpz_gcd_ui __gmpz_gcd_ui
     822  __GMP_DECLSPEC unsigned long int mpz_gcd_ui (mpz_ptr, mpz_srcptr, unsigned long int);
     823  
     824  #define mpz_gcdext __gmpz_gcdext
     825  __GMP_DECLSPEC void mpz_gcdext (mpz_ptr, mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr);
     826  
     827  #define mpz_get_d __gmpz_get_d
     828  __GMP_DECLSPEC double mpz_get_d (mpz_srcptr) __GMP_ATTRIBUTE_PURE;
     829  
     830  #define mpz_get_d_2exp __gmpz_get_d_2exp
     831  __GMP_DECLSPEC double mpz_get_d_2exp (signed long int *, mpz_srcptr);
     832  
     833  #define mpz_get_si __gmpz_get_si
     834  __GMP_DECLSPEC /* signed */ long int mpz_get_si (mpz_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE;
     835  
     836  #define mpz_get_str __gmpz_get_str
     837  __GMP_DECLSPEC char *mpz_get_str (char *, int, mpz_srcptr);
     838  
     839  #define mpz_get_ui __gmpz_get_ui
     840  #if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpz_get_ui)
     841  __GMP_DECLSPEC unsigned long int mpz_get_ui (mpz_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE;
     842  #endif
     843  
     844  #define mpz_getlimbn __gmpz_getlimbn
     845  #if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpz_getlimbn)
     846  __GMP_DECLSPEC mp_limb_t mpz_getlimbn (mpz_srcptr, mp_size_t) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE;
     847  #endif
     848  
     849  #define mpz_hamdist __gmpz_hamdist
     850  __GMP_DECLSPEC mp_bitcnt_t mpz_hamdist (mpz_srcptr, mpz_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE;
     851  
     852  #define mpz_import __gmpz_import
     853  __GMP_DECLSPEC void mpz_import (mpz_ptr, size_t, int, size_t, int, size_t, const void *);
     854  
     855  #define mpz_init __gmpz_init
     856  __GMP_DECLSPEC void mpz_init (mpz_ptr) __GMP_NOTHROW;
     857  
     858  #define mpz_init2 __gmpz_init2
     859  __GMP_DECLSPEC void mpz_init2 (mpz_ptr, mp_bitcnt_t);
     860  
     861  #define mpz_inits __gmpz_inits
     862  __GMP_DECLSPEC void mpz_inits (mpz_ptr, ...) __GMP_NOTHROW;
     863  
     864  #define mpz_init_set __gmpz_init_set
     865  __GMP_DECLSPEC void mpz_init_set (mpz_ptr, mpz_srcptr);
     866  
     867  #define mpz_init_set_d __gmpz_init_set_d
     868  __GMP_DECLSPEC void mpz_init_set_d (mpz_ptr, double);
     869  
     870  #define mpz_init_set_si __gmpz_init_set_si
     871  __GMP_DECLSPEC void mpz_init_set_si (mpz_ptr, signed long int);
     872  
     873  #define mpz_init_set_str __gmpz_init_set_str
     874  __GMP_DECLSPEC int mpz_init_set_str (mpz_ptr, const char *, int);
     875  
     876  #define mpz_init_set_ui __gmpz_init_set_ui
     877  __GMP_DECLSPEC void mpz_init_set_ui (mpz_ptr, unsigned long int);
     878  
     879  #define mpz_inp_raw __gmpz_inp_raw
     880  #ifdef _GMP_H_HAVE_FILE
     881  __GMP_DECLSPEC size_t mpz_inp_raw (mpz_ptr, FILE *);
     882  #endif
     883  
     884  #define mpz_inp_str __gmpz_inp_str
     885  #ifdef _GMP_H_HAVE_FILE
     886  __GMP_DECLSPEC size_t mpz_inp_str (mpz_ptr, FILE *, int);
     887  #endif
     888  
     889  #define mpz_invert __gmpz_invert
     890  __GMP_DECLSPEC int mpz_invert (mpz_ptr, mpz_srcptr, mpz_srcptr);
     891  
     892  #define mpz_ior __gmpz_ior
     893  __GMP_DECLSPEC void mpz_ior (mpz_ptr, mpz_srcptr, mpz_srcptr);
     894  
     895  #define mpz_jacobi __gmpz_jacobi
     896  __GMP_DECLSPEC int mpz_jacobi (mpz_srcptr, mpz_srcptr) __GMP_ATTRIBUTE_PURE;
     897  
     898  #define mpz_kronecker mpz_jacobi  /* alias */
     899  
     900  #define mpz_kronecker_si __gmpz_kronecker_si
     901  __GMP_DECLSPEC int mpz_kronecker_si (mpz_srcptr, long) __GMP_ATTRIBUTE_PURE;
     902  
     903  #define mpz_kronecker_ui __gmpz_kronecker_ui
     904  __GMP_DECLSPEC int mpz_kronecker_ui (mpz_srcptr, unsigned long) __GMP_ATTRIBUTE_PURE;
     905  
     906  #define mpz_si_kronecker __gmpz_si_kronecker
     907  __GMP_DECLSPEC int mpz_si_kronecker (long, mpz_srcptr) __GMP_ATTRIBUTE_PURE;
     908  
     909  #define mpz_ui_kronecker __gmpz_ui_kronecker
     910  __GMP_DECLSPEC int mpz_ui_kronecker (unsigned long, mpz_srcptr) __GMP_ATTRIBUTE_PURE;
     911  
     912  #define mpz_lcm __gmpz_lcm
     913  __GMP_DECLSPEC void mpz_lcm (mpz_ptr, mpz_srcptr, mpz_srcptr);
     914  
     915  #define mpz_lcm_ui __gmpz_lcm_ui
     916  __GMP_DECLSPEC void mpz_lcm_ui (mpz_ptr, mpz_srcptr, unsigned long);
     917  
     918  #define mpz_legendre mpz_jacobi  /* alias */
     919  
     920  #define mpz_lucnum_ui __gmpz_lucnum_ui
     921  __GMP_DECLSPEC void mpz_lucnum_ui (mpz_ptr, unsigned long int);
     922  
     923  #define mpz_lucnum2_ui __gmpz_lucnum2_ui
     924  __GMP_DECLSPEC void mpz_lucnum2_ui (mpz_ptr, mpz_ptr, unsigned long int);
     925  
     926  #define mpz_millerrabin __gmpz_millerrabin
     927  __GMP_DECLSPEC int mpz_millerrabin (mpz_srcptr, int) __GMP_ATTRIBUTE_PURE;
     928  
     929  #define mpz_mod __gmpz_mod
     930  __GMP_DECLSPEC void mpz_mod (mpz_ptr, mpz_srcptr, mpz_srcptr);
     931  
     932  #define mpz_mod_ui mpz_fdiv_r_ui /* same as fdiv_r because divisor unsigned */
     933  
     934  #define mpz_mul __gmpz_mul
     935  __GMP_DECLSPEC void mpz_mul (mpz_ptr, mpz_srcptr, mpz_srcptr);
     936  
     937  #define mpz_mul_2exp __gmpz_mul_2exp
     938  __GMP_DECLSPEC void mpz_mul_2exp (mpz_ptr, mpz_srcptr, mp_bitcnt_t);
     939  
     940  #define mpz_mul_si __gmpz_mul_si
     941  __GMP_DECLSPEC void mpz_mul_si (mpz_ptr, mpz_srcptr, long int);
     942  
     943  #define mpz_mul_ui __gmpz_mul_ui
     944  __GMP_DECLSPEC void mpz_mul_ui (mpz_ptr, mpz_srcptr, unsigned long int);
     945  
     946  #define mpz_neg __gmpz_neg
     947  #if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpz_neg)
     948  __GMP_DECLSPEC void mpz_neg (mpz_ptr, mpz_srcptr);
     949  #endif
     950  
     951  #define mpz_nextprime __gmpz_nextprime
     952  __GMP_DECLSPEC void mpz_nextprime (mpz_ptr, mpz_srcptr);
     953  
     954  #define mpz_prevprime __gmpz_prevprime
     955  __GMP_DECLSPEC int mpz_prevprime (mpz_ptr, mpz_srcptr);
     956  
     957  #define mpz_out_raw __gmpz_out_raw
     958  #ifdef _GMP_H_HAVE_FILE
     959  __GMP_DECLSPEC size_t mpz_out_raw (FILE *, mpz_srcptr);
     960  #endif
     961  
     962  #define mpz_out_str __gmpz_out_str
     963  #ifdef _GMP_H_HAVE_FILE
     964  __GMP_DECLSPEC size_t mpz_out_str (FILE *, int, mpz_srcptr);
     965  #endif
     966  
     967  #define mpz_perfect_power_p __gmpz_perfect_power_p
     968  __GMP_DECLSPEC int mpz_perfect_power_p (mpz_srcptr) __GMP_ATTRIBUTE_PURE;
     969  
     970  #define mpz_perfect_square_p __gmpz_perfect_square_p
     971  #if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpz_perfect_square_p)
     972  __GMP_DECLSPEC int mpz_perfect_square_p (mpz_srcptr) __GMP_ATTRIBUTE_PURE;
     973  #endif
     974  
     975  #define mpz_popcount __gmpz_popcount
     976  #if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpz_popcount)
     977  __GMP_DECLSPEC mp_bitcnt_t mpz_popcount (mpz_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE;
     978  #endif
     979  
     980  #define mpz_pow_ui __gmpz_pow_ui
     981  __GMP_DECLSPEC void mpz_pow_ui (mpz_ptr, mpz_srcptr, unsigned long int);
     982  
     983  #define mpz_powm __gmpz_powm
     984  __GMP_DECLSPEC void mpz_powm (mpz_ptr, mpz_srcptr, mpz_srcptr, mpz_srcptr);
     985  
     986  #define mpz_powm_sec __gmpz_powm_sec
     987  __GMP_DECLSPEC void mpz_powm_sec (mpz_ptr, mpz_srcptr, mpz_srcptr, mpz_srcptr);
     988  
     989  #define mpz_powm_ui __gmpz_powm_ui
     990  __GMP_DECLSPEC void mpz_powm_ui (mpz_ptr, mpz_srcptr, unsigned long int, mpz_srcptr);
     991  
     992  #define mpz_probab_prime_p __gmpz_probab_prime_p
     993  __GMP_DECLSPEC int mpz_probab_prime_p (mpz_srcptr, int) __GMP_ATTRIBUTE_PURE;
     994  
     995  #define mpz_random __gmpz_random
     996  __GMP_DECLSPEC void mpz_random (mpz_ptr, mp_size_t);
     997  
     998  #define mpz_random2 __gmpz_random2
     999  __GMP_DECLSPEC void mpz_random2 (mpz_ptr, mp_size_t);
    1000  
    1001  #define mpz_realloc2 __gmpz_realloc2
    1002  __GMP_DECLSPEC void mpz_realloc2 (mpz_ptr, mp_bitcnt_t);
    1003  
    1004  #define mpz_remove __gmpz_remove
    1005  __GMP_DECLSPEC mp_bitcnt_t mpz_remove (mpz_ptr, mpz_srcptr, mpz_srcptr);
    1006  
    1007  #define mpz_root __gmpz_root
    1008  __GMP_DECLSPEC int mpz_root (mpz_ptr, mpz_srcptr, unsigned long int);
    1009  
    1010  #define mpz_rootrem __gmpz_rootrem
    1011  __GMP_DECLSPEC void mpz_rootrem (mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long int);
    1012  
    1013  #define mpz_rrandomb __gmpz_rrandomb
    1014  __GMP_DECLSPEC void mpz_rrandomb (mpz_ptr, gmp_randstate_ptr, mp_bitcnt_t);
    1015  
    1016  #define mpz_scan0 __gmpz_scan0
    1017  __GMP_DECLSPEC mp_bitcnt_t mpz_scan0 (mpz_srcptr, mp_bitcnt_t) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE;
    1018  
    1019  #define mpz_scan1 __gmpz_scan1
    1020  __GMP_DECLSPEC mp_bitcnt_t mpz_scan1 (mpz_srcptr, mp_bitcnt_t) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE;
    1021  
    1022  #define mpz_set __gmpz_set
    1023  __GMP_DECLSPEC void mpz_set (mpz_ptr, mpz_srcptr);
    1024  
    1025  #define mpz_set_d __gmpz_set_d
    1026  __GMP_DECLSPEC void mpz_set_d (mpz_ptr, double);
    1027  
    1028  #define mpz_set_f __gmpz_set_f
    1029  __GMP_DECLSPEC void mpz_set_f (mpz_ptr, mpf_srcptr);
    1030  
    1031  #define mpz_set_q __gmpz_set_q
    1032  #if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpz_set_q)
    1033  __GMP_DECLSPEC void mpz_set_q (mpz_ptr, mpq_srcptr);
    1034  #endif
    1035  
    1036  #define mpz_set_si __gmpz_set_si
    1037  __GMP_DECLSPEC void mpz_set_si (mpz_ptr, signed long int);
    1038  
    1039  #define mpz_set_str __gmpz_set_str
    1040  __GMP_DECLSPEC int mpz_set_str (mpz_ptr, const char *, int);
    1041  
    1042  #define mpz_set_ui __gmpz_set_ui
    1043  __GMP_DECLSPEC void mpz_set_ui (mpz_ptr, unsigned long int);
    1044  
    1045  #define mpz_setbit __gmpz_setbit
    1046  __GMP_DECLSPEC void mpz_setbit (mpz_ptr, mp_bitcnt_t);
    1047  
    1048  #define mpz_size __gmpz_size
    1049  #if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpz_size)
    1050  __GMP_DECLSPEC size_t mpz_size (mpz_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE;
    1051  #endif
    1052  
    1053  #define mpz_sizeinbase __gmpz_sizeinbase
    1054  __GMP_DECLSPEC size_t mpz_sizeinbase (mpz_srcptr, int) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE;
    1055  
    1056  #define mpz_sqrt __gmpz_sqrt
    1057  __GMP_DECLSPEC void mpz_sqrt (mpz_ptr, mpz_srcptr);
    1058  
    1059  #define mpz_sqrtrem __gmpz_sqrtrem
    1060  __GMP_DECLSPEC void mpz_sqrtrem (mpz_ptr, mpz_ptr, mpz_srcptr);
    1061  
    1062  #define mpz_sub __gmpz_sub
    1063  __GMP_DECLSPEC void mpz_sub (mpz_ptr, mpz_srcptr, mpz_srcptr);
    1064  
    1065  #define mpz_sub_ui __gmpz_sub_ui
    1066  __GMP_DECLSPEC void mpz_sub_ui (mpz_ptr, mpz_srcptr, unsigned long int);
    1067  
    1068  #define mpz_ui_sub __gmpz_ui_sub
    1069  __GMP_DECLSPEC void mpz_ui_sub (mpz_ptr, unsigned long int, mpz_srcptr);
    1070  
    1071  #define mpz_submul __gmpz_submul
    1072  __GMP_DECLSPEC void mpz_submul (mpz_ptr, mpz_srcptr, mpz_srcptr);
    1073  
    1074  #define mpz_submul_ui __gmpz_submul_ui
    1075  __GMP_DECLSPEC void mpz_submul_ui (mpz_ptr, mpz_srcptr, unsigned long int);
    1076  
    1077  #define mpz_swap __gmpz_swap
    1078  __GMP_DECLSPEC void mpz_swap (mpz_ptr, mpz_ptr) __GMP_NOTHROW;
    1079  
    1080  #define mpz_tdiv_ui __gmpz_tdiv_ui
    1081  __GMP_DECLSPEC unsigned long int mpz_tdiv_ui (mpz_srcptr, unsigned long int) __GMP_ATTRIBUTE_PURE;
    1082  
    1083  #define mpz_tdiv_q __gmpz_tdiv_q
    1084  __GMP_DECLSPEC void mpz_tdiv_q (mpz_ptr, mpz_srcptr, mpz_srcptr);
    1085  
    1086  #define mpz_tdiv_q_2exp __gmpz_tdiv_q_2exp
    1087  __GMP_DECLSPEC void mpz_tdiv_q_2exp (mpz_ptr, mpz_srcptr, mp_bitcnt_t);
    1088  
    1089  #define mpz_tdiv_q_ui __gmpz_tdiv_q_ui
    1090  __GMP_DECLSPEC unsigned long int mpz_tdiv_q_ui (mpz_ptr, mpz_srcptr, unsigned long int);
    1091  
    1092  #define mpz_tdiv_qr __gmpz_tdiv_qr
    1093  __GMP_DECLSPEC void mpz_tdiv_qr (mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr);
    1094  
    1095  #define mpz_tdiv_qr_ui __gmpz_tdiv_qr_ui
    1096  __GMP_DECLSPEC unsigned long int mpz_tdiv_qr_ui (mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long int);
    1097  
    1098  #define mpz_tdiv_r __gmpz_tdiv_r
    1099  __GMP_DECLSPEC void mpz_tdiv_r (mpz_ptr, mpz_srcptr, mpz_srcptr);
    1100  
    1101  #define mpz_tdiv_r_2exp __gmpz_tdiv_r_2exp
    1102  __GMP_DECLSPEC void mpz_tdiv_r_2exp (mpz_ptr, mpz_srcptr, mp_bitcnt_t);
    1103  
    1104  #define mpz_tdiv_r_ui __gmpz_tdiv_r_ui
    1105  __GMP_DECLSPEC unsigned long int mpz_tdiv_r_ui (mpz_ptr, mpz_srcptr, unsigned long int);
    1106  
    1107  #define mpz_tstbit __gmpz_tstbit
    1108  __GMP_DECLSPEC int mpz_tstbit (mpz_srcptr, mp_bitcnt_t) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE;
    1109  
    1110  #define mpz_ui_pow_ui __gmpz_ui_pow_ui
    1111  __GMP_DECLSPEC void mpz_ui_pow_ui (mpz_ptr, unsigned long int, unsigned long int);
    1112  
    1113  #define mpz_urandomb __gmpz_urandomb
    1114  __GMP_DECLSPEC void mpz_urandomb (mpz_ptr, gmp_randstate_ptr, mp_bitcnt_t);
    1115  
    1116  #define mpz_urandomm __gmpz_urandomm
    1117  __GMP_DECLSPEC void mpz_urandomm (mpz_ptr, gmp_randstate_ptr, mpz_srcptr);
    1118  
    1119  #define mpz_xor __gmpz_xor
    1120  #define mpz_eor __gmpz_xor
    1121  __GMP_DECLSPEC void mpz_xor (mpz_ptr, mpz_srcptr, mpz_srcptr);
    1122  
    1123  #define mpz_limbs_read __gmpz_limbs_read
    1124  __GMP_DECLSPEC mp_srcptr mpz_limbs_read (mpz_srcptr);
    1125  
    1126  #define mpz_limbs_write __gmpz_limbs_write
    1127  __GMP_DECLSPEC mp_ptr mpz_limbs_write (mpz_ptr, mp_size_t);
    1128  
    1129  #define mpz_limbs_modify __gmpz_limbs_modify
    1130  __GMP_DECLSPEC mp_ptr mpz_limbs_modify (mpz_ptr, mp_size_t);
    1131  
    1132  #define mpz_limbs_finish __gmpz_limbs_finish
    1133  __GMP_DECLSPEC void mpz_limbs_finish (mpz_ptr, mp_size_t);
    1134  
    1135  #define mpz_roinit_n __gmpz_roinit_n
    1136  __GMP_DECLSPEC mpz_srcptr mpz_roinit_n (mpz_ptr, mp_srcptr, mp_size_t);
    1137  
    1138  #define MPZ_ROINIT_N(xp, xs) {{0, (xs),(xp) }}
    1139  
    1140  /**************** Rational (i.e. Q) routines.  ****************/
    1141  
    1142  #define mpq_abs __gmpq_abs
    1143  #if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpq_abs)
    1144  __GMP_DECLSPEC void mpq_abs (mpq_ptr, mpq_srcptr);
    1145  #endif
    1146  
    1147  #define mpq_add __gmpq_add
    1148  __GMP_DECLSPEC void mpq_add (mpq_ptr, mpq_srcptr, mpq_srcptr);
    1149  
    1150  #define mpq_canonicalize __gmpq_canonicalize
    1151  __GMP_DECLSPEC void mpq_canonicalize (mpq_ptr);
    1152  
    1153  #define mpq_clear __gmpq_clear
    1154  __GMP_DECLSPEC void mpq_clear (mpq_ptr);
    1155  
    1156  #define mpq_clears __gmpq_clears
    1157  __GMP_DECLSPEC void mpq_clears (mpq_ptr, ...);
    1158  
    1159  #define mpq_cmp __gmpq_cmp
    1160  __GMP_DECLSPEC int mpq_cmp (mpq_srcptr, mpq_srcptr) __GMP_ATTRIBUTE_PURE;
    1161  
    1162  #define _mpq_cmp_si __gmpq_cmp_si
    1163  __GMP_DECLSPEC int _mpq_cmp_si (mpq_srcptr, long, unsigned long) __GMP_ATTRIBUTE_PURE;
    1164  
    1165  #define _mpq_cmp_ui __gmpq_cmp_ui
    1166  __GMP_DECLSPEC int _mpq_cmp_ui (mpq_srcptr, unsigned long int, unsigned long int) __GMP_ATTRIBUTE_PURE;
    1167  
    1168  #define mpq_cmp_z __gmpq_cmp_z
    1169  __GMP_DECLSPEC int mpq_cmp_z (mpq_srcptr, mpz_srcptr) __GMP_ATTRIBUTE_PURE;
    1170  
    1171  #define mpq_div __gmpq_div
    1172  __GMP_DECLSPEC void mpq_div (mpq_ptr, mpq_srcptr, mpq_srcptr);
    1173  
    1174  #define mpq_div_2exp __gmpq_div_2exp
    1175  __GMP_DECLSPEC void mpq_div_2exp (mpq_ptr, mpq_srcptr, mp_bitcnt_t);
    1176  
    1177  #define mpq_equal __gmpq_equal
    1178  __GMP_DECLSPEC int mpq_equal (mpq_srcptr, mpq_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE;
    1179  
    1180  #define mpq_get_num __gmpq_get_num
    1181  __GMP_DECLSPEC void mpq_get_num (mpz_ptr, mpq_srcptr);
    1182  
    1183  #define mpq_get_den __gmpq_get_den
    1184  __GMP_DECLSPEC void mpq_get_den (mpz_ptr, mpq_srcptr);
    1185  
    1186  #define mpq_get_d __gmpq_get_d
    1187  __GMP_DECLSPEC double mpq_get_d (mpq_srcptr) __GMP_ATTRIBUTE_PURE;
    1188  
    1189  #define mpq_get_str __gmpq_get_str
    1190  __GMP_DECLSPEC char *mpq_get_str (char *, int, mpq_srcptr);
    1191  
    1192  #define mpq_init __gmpq_init
    1193  __GMP_DECLSPEC void mpq_init (mpq_ptr);
    1194  
    1195  #define mpq_inits __gmpq_inits
    1196  __GMP_DECLSPEC void mpq_inits (mpq_ptr, ...);
    1197  
    1198  #define mpq_inp_str __gmpq_inp_str
    1199  #ifdef _GMP_H_HAVE_FILE
    1200  __GMP_DECLSPEC size_t mpq_inp_str (mpq_ptr, FILE *, int);
    1201  #endif
    1202  
    1203  #define mpq_inv __gmpq_inv
    1204  __GMP_DECLSPEC void mpq_inv (mpq_ptr, mpq_srcptr);
    1205  
    1206  #define mpq_mul __gmpq_mul
    1207  __GMP_DECLSPEC void mpq_mul (mpq_ptr, mpq_srcptr, mpq_srcptr);
    1208  
    1209  #define mpq_mul_2exp __gmpq_mul_2exp
    1210  __GMP_DECLSPEC void mpq_mul_2exp (mpq_ptr, mpq_srcptr, mp_bitcnt_t);
    1211  
    1212  #define mpq_neg __gmpq_neg
    1213  #if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpq_neg)
    1214  __GMP_DECLSPEC void mpq_neg (mpq_ptr, mpq_srcptr);
    1215  #endif
    1216  
    1217  #define mpq_out_str __gmpq_out_str
    1218  #ifdef _GMP_H_HAVE_FILE
    1219  __GMP_DECLSPEC size_t mpq_out_str (FILE *, int, mpq_srcptr);
    1220  #endif
    1221  
    1222  #define mpq_set __gmpq_set
    1223  __GMP_DECLSPEC void mpq_set (mpq_ptr, mpq_srcptr);
    1224  
    1225  #define mpq_set_d __gmpq_set_d
    1226  __GMP_DECLSPEC void mpq_set_d (mpq_ptr, double);
    1227  
    1228  #define mpq_set_den __gmpq_set_den
    1229  __GMP_DECLSPEC void mpq_set_den (mpq_ptr, mpz_srcptr);
    1230  
    1231  #define mpq_set_f __gmpq_set_f
    1232  __GMP_DECLSPEC void mpq_set_f (mpq_ptr, mpf_srcptr);
    1233  
    1234  #define mpq_set_num __gmpq_set_num
    1235  __GMP_DECLSPEC void mpq_set_num (mpq_ptr, mpz_srcptr);
    1236  
    1237  #define mpq_set_si __gmpq_set_si
    1238  __GMP_DECLSPEC void mpq_set_si (mpq_ptr, signed long int, unsigned long int);
    1239  
    1240  #define mpq_set_str __gmpq_set_str
    1241  __GMP_DECLSPEC int mpq_set_str (mpq_ptr, const char *, int);
    1242  
    1243  #define mpq_set_ui __gmpq_set_ui
    1244  __GMP_DECLSPEC void mpq_set_ui (mpq_ptr, unsigned long int, unsigned long int);
    1245  
    1246  #define mpq_set_z __gmpq_set_z
    1247  __GMP_DECLSPEC void mpq_set_z (mpq_ptr, mpz_srcptr);
    1248  
    1249  #define mpq_sub __gmpq_sub
    1250  __GMP_DECLSPEC void mpq_sub (mpq_ptr, mpq_srcptr, mpq_srcptr);
    1251  
    1252  #define mpq_swap __gmpq_swap
    1253  __GMP_DECLSPEC void mpq_swap (mpq_ptr, mpq_ptr) __GMP_NOTHROW;
    1254  
    1255  
    1256  /**************** Float (i.e. F) routines.  ****************/
    1257  
    1258  #define mpf_abs __gmpf_abs
    1259  __GMP_DECLSPEC void mpf_abs (mpf_ptr, mpf_srcptr);
    1260  
    1261  #define mpf_add __gmpf_add
    1262  __GMP_DECLSPEC void mpf_add (mpf_ptr, mpf_srcptr, mpf_srcptr);
    1263  
    1264  #define mpf_add_ui __gmpf_add_ui
    1265  __GMP_DECLSPEC void mpf_add_ui (mpf_ptr, mpf_srcptr, unsigned long int);
    1266  #define mpf_ceil __gmpf_ceil
    1267  __GMP_DECLSPEC void mpf_ceil (mpf_ptr, mpf_srcptr);
    1268  
    1269  #define mpf_clear __gmpf_clear
    1270  __GMP_DECLSPEC void mpf_clear (mpf_ptr);
    1271  
    1272  #define mpf_clears __gmpf_clears
    1273  __GMP_DECLSPEC void mpf_clears (mpf_ptr, ...);
    1274  
    1275  #define mpf_cmp __gmpf_cmp
    1276  __GMP_DECLSPEC int mpf_cmp (mpf_srcptr, mpf_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE;
    1277  
    1278  #define mpf_cmp_z __gmpf_cmp_z
    1279  __GMP_DECLSPEC int mpf_cmp_z (mpf_srcptr, mpz_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE;
    1280  
    1281  #define mpf_cmp_d __gmpf_cmp_d
    1282  __GMP_DECLSPEC int mpf_cmp_d (mpf_srcptr, double) __GMP_ATTRIBUTE_PURE;
    1283  
    1284  #define mpf_cmp_si __gmpf_cmp_si
    1285  __GMP_DECLSPEC int mpf_cmp_si (mpf_srcptr, signed long int) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE;
    1286  
    1287  #define mpf_cmp_ui __gmpf_cmp_ui
    1288  __GMP_DECLSPEC int mpf_cmp_ui (mpf_srcptr, unsigned long int) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE;
    1289  
    1290  #define mpf_div __gmpf_div
    1291  __GMP_DECLSPEC void mpf_div (mpf_ptr, mpf_srcptr, mpf_srcptr);
    1292  
    1293  #define mpf_div_2exp __gmpf_div_2exp
    1294  __GMP_DECLSPEC void mpf_div_2exp (mpf_ptr, mpf_srcptr, mp_bitcnt_t);
    1295  
    1296  #define mpf_div_ui __gmpf_div_ui
    1297  __GMP_DECLSPEC void mpf_div_ui (mpf_ptr, mpf_srcptr, unsigned long int);
    1298  
    1299  #define mpf_dump __gmpf_dump
    1300  __GMP_DECLSPEC void mpf_dump (mpf_srcptr);
    1301  
    1302  #define mpf_eq __gmpf_eq
    1303  __GMP_DECLSPEC int mpf_eq (mpf_srcptr, mpf_srcptr, mp_bitcnt_t) __GMP_ATTRIBUTE_PURE;
    1304  
    1305  #define mpf_fits_sint_p __gmpf_fits_sint_p
    1306  __GMP_DECLSPEC int mpf_fits_sint_p (mpf_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE;
    1307  
    1308  #define mpf_fits_slong_p __gmpf_fits_slong_p
    1309  __GMP_DECLSPEC int mpf_fits_slong_p (mpf_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE;
    1310  
    1311  #define mpf_fits_sshort_p __gmpf_fits_sshort_p
    1312  __GMP_DECLSPEC int mpf_fits_sshort_p (mpf_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE;
    1313  
    1314  #define mpf_fits_uint_p __gmpf_fits_uint_p
    1315  __GMP_DECLSPEC int mpf_fits_uint_p (mpf_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE;
    1316  
    1317  #define mpf_fits_ulong_p __gmpf_fits_ulong_p
    1318  __GMP_DECLSPEC int mpf_fits_ulong_p (mpf_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE;
    1319  
    1320  #define mpf_fits_ushort_p __gmpf_fits_ushort_p
    1321  __GMP_DECLSPEC int mpf_fits_ushort_p (mpf_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE;
    1322  
    1323  #define mpf_floor __gmpf_floor
    1324  __GMP_DECLSPEC void mpf_floor (mpf_ptr, mpf_srcptr);
    1325  
    1326  #define mpf_get_d __gmpf_get_d
    1327  __GMP_DECLSPEC double mpf_get_d (mpf_srcptr) __GMP_ATTRIBUTE_PURE;
    1328  
    1329  #define mpf_get_d_2exp __gmpf_get_d_2exp
    1330  __GMP_DECLSPEC double mpf_get_d_2exp (signed long int *, mpf_srcptr);
    1331  
    1332  #define mpf_get_default_prec __gmpf_get_default_prec
    1333  __GMP_DECLSPEC mp_bitcnt_t mpf_get_default_prec (void) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE;
    1334  
    1335  #define mpf_get_prec __gmpf_get_prec
    1336  __GMP_DECLSPEC mp_bitcnt_t mpf_get_prec (mpf_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE;
    1337  
    1338  #define mpf_get_si __gmpf_get_si
    1339  __GMP_DECLSPEC long mpf_get_si (mpf_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE;
    1340  
    1341  #define mpf_get_str __gmpf_get_str
    1342  __GMP_DECLSPEC char *mpf_get_str (char *, mp_exp_t *, int, size_t, mpf_srcptr);
    1343  
    1344  #define mpf_get_ui __gmpf_get_ui
    1345  __GMP_DECLSPEC unsigned long mpf_get_ui (mpf_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE;
    1346  
    1347  #define mpf_init __gmpf_init
    1348  __GMP_DECLSPEC void mpf_init (mpf_ptr);
    1349  
    1350  #define mpf_init2 __gmpf_init2
    1351  __GMP_DECLSPEC void mpf_init2 (mpf_ptr, mp_bitcnt_t);
    1352  
    1353  #define mpf_inits __gmpf_inits
    1354  __GMP_DECLSPEC void mpf_inits (mpf_ptr, ...);
    1355  
    1356  #define mpf_init_set __gmpf_init_set
    1357  __GMP_DECLSPEC void mpf_init_set (mpf_ptr, mpf_srcptr);
    1358  
    1359  #define mpf_init_set_d __gmpf_init_set_d
    1360  __GMP_DECLSPEC void mpf_init_set_d (mpf_ptr, double);
    1361  
    1362  #define mpf_init_set_si __gmpf_init_set_si
    1363  __GMP_DECLSPEC void mpf_init_set_si (mpf_ptr, signed long int);
    1364  
    1365  #define mpf_init_set_str __gmpf_init_set_str
    1366  __GMP_DECLSPEC int mpf_init_set_str (mpf_ptr, const char *, int);
    1367  
    1368  #define mpf_init_set_ui __gmpf_init_set_ui
    1369  __GMP_DECLSPEC void mpf_init_set_ui (mpf_ptr, unsigned long int);
    1370  
    1371  #define mpf_inp_str __gmpf_inp_str
    1372  #ifdef _GMP_H_HAVE_FILE
    1373  __GMP_DECLSPEC size_t mpf_inp_str (mpf_ptr, FILE *, int);
    1374  #endif
    1375  
    1376  #define mpf_integer_p __gmpf_integer_p
    1377  __GMP_DECLSPEC int mpf_integer_p (mpf_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE;
    1378  
    1379  #define mpf_mul __gmpf_mul
    1380  __GMP_DECLSPEC void mpf_mul (mpf_ptr, mpf_srcptr, mpf_srcptr);
    1381  
    1382  #define mpf_mul_2exp __gmpf_mul_2exp
    1383  __GMP_DECLSPEC void mpf_mul_2exp (mpf_ptr, mpf_srcptr, mp_bitcnt_t);
    1384  
    1385  #define mpf_mul_ui __gmpf_mul_ui
    1386  __GMP_DECLSPEC void mpf_mul_ui (mpf_ptr, mpf_srcptr, unsigned long int);
    1387  
    1388  #define mpf_neg __gmpf_neg
    1389  __GMP_DECLSPEC void mpf_neg (mpf_ptr, mpf_srcptr);
    1390  
    1391  #define mpf_out_str __gmpf_out_str
    1392  #ifdef _GMP_H_HAVE_FILE
    1393  __GMP_DECLSPEC size_t mpf_out_str (FILE *, int, size_t, mpf_srcptr);
    1394  #endif
    1395  
    1396  #define mpf_pow_ui __gmpf_pow_ui
    1397  __GMP_DECLSPEC void mpf_pow_ui (mpf_ptr, mpf_srcptr, unsigned long int);
    1398  
    1399  #define mpf_random2 __gmpf_random2
    1400  __GMP_DECLSPEC void mpf_random2 (mpf_ptr, mp_size_t, mp_exp_t);
    1401  
    1402  #define mpf_reldiff __gmpf_reldiff
    1403  __GMP_DECLSPEC void mpf_reldiff (mpf_ptr, mpf_srcptr, mpf_srcptr);
    1404  
    1405  #define mpf_set __gmpf_set
    1406  __GMP_DECLSPEC void mpf_set (mpf_ptr, mpf_srcptr);
    1407  
    1408  #define mpf_set_d __gmpf_set_d
    1409  __GMP_DECLSPEC void mpf_set_d (mpf_ptr, double);
    1410  
    1411  #define mpf_set_default_prec __gmpf_set_default_prec
    1412  __GMP_DECLSPEC void mpf_set_default_prec (mp_bitcnt_t) __GMP_NOTHROW;
    1413  
    1414  #define mpf_set_prec __gmpf_set_prec
    1415  __GMP_DECLSPEC void mpf_set_prec (mpf_ptr, mp_bitcnt_t);
    1416  
    1417  #define mpf_set_prec_raw __gmpf_set_prec_raw
    1418  __GMP_DECLSPEC void mpf_set_prec_raw (mpf_ptr, mp_bitcnt_t) __GMP_NOTHROW;
    1419  
    1420  #define mpf_set_q __gmpf_set_q
    1421  __GMP_DECLSPEC void mpf_set_q (mpf_ptr, mpq_srcptr);
    1422  
    1423  #define mpf_set_si __gmpf_set_si
    1424  __GMP_DECLSPEC void mpf_set_si (mpf_ptr, signed long int);
    1425  
    1426  #define mpf_set_str __gmpf_set_str
    1427  __GMP_DECLSPEC int mpf_set_str (mpf_ptr, const char *, int);
    1428  
    1429  #define mpf_set_ui __gmpf_set_ui
    1430  __GMP_DECLSPEC void mpf_set_ui (mpf_ptr, unsigned long int);
    1431  
    1432  #define mpf_set_z __gmpf_set_z
    1433  __GMP_DECLSPEC void mpf_set_z (mpf_ptr, mpz_srcptr);
    1434  
    1435  #define mpf_size __gmpf_size
    1436  __GMP_DECLSPEC size_t mpf_size (mpf_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE;
    1437  
    1438  #define mpf_sqrt __gmpf_sqrt
    1439  __GMP_DECLSPEC void mpf_sqrt (mpf_ptr, mpf_srcptr);
    1440  
    1441  #define mpf_sqrt_ui __gmpf_sqrt_ui
    1442  __GMP_DECLSPEC void mpf_sqrt_ui (mpf_ptr, unsigned long int);
    1443  
    1444  #define mpf_sub __gmpf_sub
    1445  __GMP_DECLSPEC void mpf_sub (mpf_ptr, mpf_srcptr, mpf_srcptr);
    1446  
    1447  #define mpf_sub_ui __gmpf_sub_ui
    1448  __GMP_DECLSPEC void mpf_sub_ui (mpf_ptr, mpf_srcptr, unsigned long int);
    1449  
    1450  #define mpf_swap __gmpf_swap
    1451  __GMP_DECLSPEC void mpf_swap (mpf_ptr, mpf_ptr) __GMP_NOTHROW;
    1452  
    1453  #define mpf_trunc __gmpf_trunc
    1454  __GMP_DECLSPEC void mpf_trunc (mpf_ptr, mpf_srcptr);
    1455  
    1456  #define mpf_ui_div __gmpf_ui_div
    1457  __GMP_DECLSPEC void mpf_ui_div (mpf_ptr, unsigned long int, mpf_srcptr);
    1458  
    1459  #define mpf_ui_sub __gmpf_ui_sub
    1460  __GMP_DECLSPEC void mpf_ui_sub (mpf_ptr, unsigned long int, mpf_srcptr);
    1461  
    1462  #define mpf_urandomb __gmpf_urandomb
    1463  __GMP_DECLSPEC void mpf_urandomb (mpf_ptr, gmp_randstate_ptr, mp_bitcnt_t);
    1464  
    1465  
    1466  /************ Low level positive-integer (i.e. N) routines.  ************/
    1467  
    1468  /* This is ugly, but we need to make user calls reach the prefixed function. */
    1469  
    1470  #define mpn_add __MPN(add)
    1471  #if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpn_add)
    1472  __GMP_DECLSPEC mp_limb_t mpn_add (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t);
    1473  #endif
    1474  
    1475  #define mpn_add_1 __MPN(add_1)
    1476  #if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpn_add_1)
    1477  __GMP_DECLSPEC mp_limb_t mpn_add_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t) __GMP_NOTHROW;
    1478  #endif
    1479  
    1480  #define mpn_add_n __MPN(add_n)
    1481  __GMP_DECLSPEC mp_limb_t mpn_add_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t);
    1482  
    1483  #define mpn_addmul_1 __MPN(addmul_1)
    1484  __GMP_DECLSPEC mp_limb_t mpn_addmul_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t);
    1485  
    1486  #define mpn_cmp __MPN(cmp)
    1487  #if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpn_cmp)
    1488  __GMP_DECLSPEC int mpn_cmp (mp_srcptr, mp_srcptr, mp_size_t) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE;
    1489  #endif
    1490  
    1491  #define mpn_zero_p __MPN(zero_p)
    1492  #if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpn_zero_p)
    1493  __GMP_DECLSPEC int mpn_zero_p (mp_srcptr, mp_size_t) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE;
    1494  #endif
    1495  
    1496  #define mpn_divexact_1 __MPN(divexact_1)
    1497  __GMP_DECLSPEC void mpn_divexact_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t);
    1498  
    1499  #define mpn_divexact_by3(dst,src,size) \
    1500    mpn_divexact_by3c (dst, src, size, __GMP_CAST (mp_limb_t, 0))
    1501  
    1502  #define mpn_divexact_by3c __MPN(divexact_by3c)
    1503  __GMP_DECLSPEC mp_limb_t mpn_divexact_by3c (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t);
    1504  
    1505  #define mpn_divmod_1(qp,np,nsize,dlimb) \
    1506    mpn_divrem_1 (qp, __GMP_CAST (mp_size_t, 0), np, nsize, dlimb)
    1507  
    1508  #define mpn_divrem __MPN(divrem)
    1509  __GMP_DECLSPEC mp_limb_t mpn_divrem (mp_ptr, mp_size_t, mp_ptr, mp_size_t, mp_srcptr, mp_size_t);
    1510  
    1511  #define mpn_divrem_1 __MPN(divrem_1)
    1512  __GMP_DECLSPEC mp_limb_t mpn_divrem_1 (mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_limb_t);
    1513  
    1514  #define mpn_divrem_2 __MPN(divrem_2)
    1515  __GMP_DECLSPEC mp_limb_t mpn_divrem_2 (mp_ptr, mp_size_t, mp_ptr, mp_size_t, mp_srcptr);
    1516  
    1517  #define mpn_div_qr_1 __MPN(div_qr_1)
    1518  __GMP_DECLSPEC mp_limb_t mpn_div_qr_1 (mp_ptr, mp_limb_t *, mp_srcptr, mp_size_t, mp_limb_t);
    1519  
    1520  #define mpn_div_qr_2 __MPN(div_qr_2)
    1521  __GMP_DECLSPEC mp_limb_t mpn_div_qr_2 (mp_ptr, mp_ptr, mp_srcptr, mp_size_t, mp_srcptr);
    1522  
    1523  #define mpn_gcd __MPN(gcd)
    1524  __GMP_DECLSPEC mp_size_t mpn_gcd (mp_ptr, mp_ptr, mp_size_t, mp_ptr, mp_size_t);
    1525  
    1526  #define mpn_gcd_11 __MPN(gcd_11)
    1527  __GMP_DECLSPEC mp_limb_t mpn_gcd_11 (mp_limb_t, mp_limb_t) __GMP_ATTRIBUTE_PURE;
    1528  
    1529  #define mpn_gcd_1 __MPN(gcd_1)
    1530  __GMP_DECLSPEC mp_limb_t mpn_gcd_1 (mp_srcptr, mp_size_t, mp_limb_t) __GMP_ATTRIBUTE_PURE;
    1531  
    1532  #define mpn_gcdext_1 __MPN(gcdext_1)
    1533  __GMP_DECLSPEC mp_limb_t mpn_gcdext_1 (mp_limb_signed_t *, mp_limb_signed_t *, mp_limb_t, mp_limb_t);
    1534  
    1535  #define mpn_gcdext __MPN(gcdext)
    1536  __GMP_DECLSPEC mp_size_t mpn_gcdext (mp_ptr, mp_ptr, mp_size_t *, mp_ptr, mp_size_t, mp_ptr, mp_size_t);
    1537  
    1538  #define mpn_get_str __MPN(get_str)
    1539  __GMP_DECLSPEC size_t mpn_get_str (unsigned char *, int, mp_ptr, mp_size_t);
    1540  
    1541  #define mpn_hamdist __MPN(hamdist)
    1542  __GMP_DECLSPEC mp_bitcnt_t mpn_hamdist (mp_srcptr, mp_srcptr, mp_size_t) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE;
    1543  
    1544  #define mpn_lshift __MPN(lshift)
    1545  __GMP_DECLSPEC mp_limb_t mpn_lshift (mp_ptr, mp_srcptr, mp_size_t, unsigned int);
    1546  
    1547  #define mpn_mod_1 __MPN(mod_1)
    1548  __GMP_DECLSPEC mp_limb_t mpn_mod_1 (mp_srcptr, mp_size_t, mp_limb_t) __GMP_ATTRIBUTE_PURE;
    1549  
    1550  #define mpn_mul __MPN(mul)
    1551  __GMP_DECLSPEC mp_limb_t mpn_mul (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t);
    1552  
    1553  #define mpn_mul_1 __MPN(mul_1)
    1554  __GMP_DECLSPEC mp_limb_t mpn_mul_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t);
    1555  
    1556  #define mpn_mul_n __MPN(mul_n)
    1557  __GMP_DECLSPEC void mpn_mul_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t);
    1558  
    1559  #define mpn_sqr __MPN(sqr)
    1560  __GMP_DECLSPEC void mpn_sqr (mp_ptr, mp_srcptr, mp_size_t);
    1561  
    1562  #define mpn_neg __MPN(neg)
    1563  #if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpn_neg)
    1564  __GMP_DECLSPEC mp_limb_t mpn_neg (mp_ptr, mp_srcptr, mp_size_t);
    1565  #endif
    1566  
    1567  #define mpn_com __MPN(com)
    1568  __GMP_DECLSPEC void mpn_com (mp_ptr, mp_srcptr, mp_size_t);
    1569  
    1570  #define mpn_perfect_square_p __MPN(perfect_square_p)
    1571  __GMP_DECLSPEC int mpn_perfect_square_p (mp_srcptr, mp_size_t) __GMP_ATTRIBUTE_PURE;
    1572  
    1573  #define mpn_perfect_power_p __MPN(perfect_power_p)
    1574  __GMP_DECLSPEC int mpn_perfect_power_p (mp_srcptr, mp_size_t) __GMP_ATTRIBUTE_PURE;
    1575  
    1576  #define mpn_popcount __MPN(popcount)
    1577  __GMP_DECLSPEC mp_bitcnt_t mpn_popcount (mp_srcptr, mp_size_t) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE;
    1578  
    1579  #define mpn_pow_1 __MPN(pow_1)
    1580  __GMP_DECLSPEC mp_size_t mpn_pow_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t, mp_ptr);
    1581  
    1582  /* undocumented now, but retained here for upward compatibility */
    1583  #define mpn_preinv_mod_1 __MPN(preinv_mod_1)
    1584  __GMP_DECLSPEC mp_limb_t mpn_preinv_mod_1 (mp_srcptr, mp_size_t, mp_limb_t, mp_limb_t) __GMP_ATTRIBUTE_PURE;
    1585  
    1586  #define mpn_random __MPN(random)
    1587  __GMP_DECLSPEC void mpn_random (mp_ptr, mp_size_t);
    1588  
    1589  #define mpn_random2 __MPN(random2)
    1590  __GMP_DECLSPEC void mpn_random2 (mp_ptr, mp_size_t);
    1591  
    1592  #define mpn_rshift __MPN(rshift)
    1593  __GMP_DECLSPEC mp_limb_t mpn_rshift (mp_ptr, mp_srcptr, mp_size_t, unsigned int);
    1594  
    1595  #define mpn_scan0 __MPN(scan0)
    1596  __GMP_DECLSPEC mp_bitcnt_t mpn_scan0 (mp_srcptr, mp_bitcnt_t) __GMP_ATTRIBUTE_PURE;
    1597  
    1598  #define mpn_scan1 __MPN(scan1)
    1599  __GMP_DECLSPEC mp_bitcnt_t mpn_scan1 (mp_srcptr, mp_bitcnt_t) __GMP_ATTRIBUTE_PURE;
    1600  
    1601  #define mpn_set_str __MPN(set_str)
    1602  __GMP_DECLSPEC mp_size_t mpn_set_str (mp_ptr, const unsigned char *, size_t, int);
    1603  
    1604  #define mpn_sizeinbase __MPN(sizeinbase)
    1605  __GMP_DECLSPEC size_t mpn_sizeinbase (mp_srcptr, mp_size_t, int);
    1606  
    1607  #define mpn_sqrtrem __MPN(sqrtrem)
    1608  __GMP_DECLSPEC mp_size_t mpn_sqrtrem (mp_ptr, mp_ptr, mp_srcptr, mp_size_t);
    1609  
    1610  #define mpn_sub __MPN(sub)
    1611  #if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpn_sub)
    1612  __GMP_DECLSPEC mp_limb_t mpn_sub (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t);
    1613  #endif
    1614  
    1615  #define mpn_sub_1 __MPN(sub_1)
    1616  #if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpn_sub_1)
    1617  __GMP_DECLSPEC mp_limb_t mpn_sub_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t) __GMP_NOTHROW;
    1618  #endif
    1619  
    1620  #define mpn_sub_n __MPN(sub_n)
    1621  __GMP_DECLSPEC mp_limb_t mpn_sub_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t);
    1622  
    1623  #define mpn_submul_1 __MPN(submul_1)
    1624  __GMP_DECLSPEC mp_limb_t mpn_submul_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t);
    1625  
    1626  #define mpn_tdiv_qr __MPN(tdiv_qr)
    1627  __GMP_DECLSPEC void mpn_tdiv_qr (mp_ptr, mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t);
    1628  
    1629  #define mpn_and_n __MPN(and_n)
    1630  __GMP_DECLSPEC void mpn_and_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t);
    1631  #define mpn_andn_n __MPN(andn_n)
    1632  __GMP_DECLSPEC void mpn_andn_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t);
    1633  #define mpn_nand_n __MPN(nand_n)
    1634  __GMP_DECLSPEC void mpn_nand_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t);
    1635  #define mpn_ior_n __MPN(ior_n)
    1636  __GMP_DECLSPEC void mpn_ior_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t);
    1637  #define mpn_iorn_n __MPN(iorn_n)
    1638  __GMP_DECLSPEC void mpn_iorn_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t);
    1639  #define mpn_nior_n __MPN(nior_n)
    1640  __GMP_DECLSPEC void mpn_nior_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t);
    1641  #define mpn_xor_n __MPN(xor_n)
    1642  __GMP_DECLSPEC void mpn_xor_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t);
    1643  #define mpn_xnor_n __MPN(xnor_n)
    1644  __GMP_DECLSPEC void mpn_xnor_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t);
    1645  
    1646  #define mpn_copyi __MPN(copyi)
    1647  __GMP_DECLSPEC void mpn_copyi (mp_ptr, mp_srcptr, mp_size_t);
    1648  #define mpn_copyd __MPN(copyd)
    1649  __GMP_DECLSPEC void mpn_copyd (mp_ptr, mp_srcptr, mp_size_t);
    1650  #define mpn_zero __MPN(zero)
    1651  __GMP_DECLSPEC void mpn_zero (mp_ptr, mp_size_t);
    1652  
    1653  #define mpn_cnd_add_n __MPN(cnd_add_n)
    1654  __GMP_DECLSPEC mp_limb_t mpn_cnd_add_n (mp_limb_t, mp_ptr, mp_srcptr, mp_srcptr, mp_size_t);
    1655  #define mpn_cnd_sub_n __MPN(cnd_sub_n)
    1656  __GMP_DECLSPEC mp_limb_t mpn_cnd_sub_n (mp_limb_t, mp_ptr, mp_srcptr, mp_srcptr, mp_size_t);
    1657  
    1658  #define mpn_sec_add_1 __MPN(sec_add_1)
    1659  __GMP_DECLSPEC mp_limb_t mpn_sec_add_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t, mp_ptr);
    1660  #define mpn_sec_add_1_itch __MPN(sec_add_1_itch)
    1661  __GMP_DECLSPEC mp_size_t mpn_sec_add_1_itch (mp_size_t) __GMP_ATTRIBUTE_PURE;
    1662  
    1663  #define mpn_sec_sub_1 __MPN(sec_sub_1)
    1664  __GMP_DECLSPEC mp_limb_t mpn_sec_sub_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t, mp_ptr);
    1665  #define mpn_sec_sub_1_itch __MPN(sec_sub_1_itch)
    1666  __GMP_DECLSPEC mp_size_t mpn_sec_sub_1_itch (mp_size_t) __GMP_ATTRIBUTE_PURE;
    1667  
    1668  #define mpn_cnd_swap  __MPN(cnd_swap)
    1669  __GMP_DECLSPEC void mpn_cnd_swap (mp_limb_t, volatile mp_limb_t *, volatile mp_limb_t *, mp_size_t);
    1670  
    1671  #define mpn_sec_mul __MPN(sec_mul)
    1672  __GMP_DECLSPEC void mpn_sec_mul (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t, mp_ptr);
    1673  #define mpn_sec_mul_itch __MPN(sec_mul_itch)
    1674  __GMP_DECLSPEC mp_size_t mpn_sec_mul_itch (mp_size_t, mp_size_t) __GMP_ATTRIBUTE_PURE;
    1675  
    1676  #define mpn_sec_sqr __MPN(sec_sqr)
    1677  __GMP_DECLSPEC void mpn_sec_sqr (mp_ptr, mp_srcptr, mp_size_t, mp_ptr);
    1678  #define mpn_sec_sqr_itch __MPN(sec_sqr_itch)
    1679  __GMP_DECLSPEC mp_size_t mpn_sec_sqr_itch (mp_size_t) __GMP_ATTRIBUTE_PURE;
    1680  
    1681  #define mpn_sec_powm __MPN(sec_powm)
    1682  __GMP_DECLSPEC void mpn_sec_powm (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_bitcnt_t, mp_srcptr, mp_size_t, mp_ptr);
    1683  #define mpn_sec_powm_itch __MPN(sec_powm_itch)
    1684  __GMP_DECLSPEC mp_size_t mpn_sec_powm_itch (mp_size_t, mp_bitcnt_t, mp_size_t) __GMP_ATTRIBUTE_PURE;
    1685  
    1686  #define mpn_sec_tabselect __MPN(sec_tabselect)
    1687  __GMP_DECLSPEC void mpn_sec_tabselect (volatile mp_limb_t *, volatile const mp_limb_t *, mp_size_t, mp_size_t, mp_size_t);
    1688  
    1689  #define mpn_sec_div_qr __MPN(sec_div_qr)
    1690  __GMP_DECLSPEC mp_limb_t mpn_sec_div_qr (mp_ptr, mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_ptr);
    1691  #define mpn_sec_div_qr_itch __MPN(sec_div_qr_itch)
    1692  __GMP_DECLSPEC mp_size_t mpn_sec_div_qr_itch (mp_size_t, mp_size_t) __GMP_ATTRIBUTE_PURE;
    1693  #define mpn_sec_div_r __MPN(sec_div_r)
    1694  __GMP_DECLSPEC void mpn_sec_div_r (mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_ptr);
    1695  #define mpn_sec_div_r_itch __MPN(sec_div_r_itch)
    1696  __GMP_DECLSPEC mp_size_t mpn_sec_div_r_itch (mp_size_t, mp_size_t) __GMP_ATTRIBUTE_PURE;
    1697  
    1698  #define mpn_sec_invert __MPN(sec_invert)
    1699  __GMP_DECLSPEC int mpn_sec_invert (mp_ptr, mp_ptr, mp_srcptr, mp_size_t, mp_bitcnt_t, mp_ptr);
    1700  #define mpn_sec_invert_itch __MPN(sec_invert_itch)
    1701  __GMP_DECLSPEC mp_size_t mpn_sec_invert_itch (mp_size_t) __GMP_ATTRIBUTE_PURE;
    1702  
    1703  
    1704  /**************** mpz inlines ****************/
    1705  
    1706  /* The following are provided as inlines where possible, but always exist as
    1707     library functions too, for binary compatibility.
    1708  
    1709     Within gmp itself this inlining generally isn't relied on, since it
    1710     doesn't get done for all compilers, whereas if something is worth
    1711     inlining then it's worth arranging always.
    1712  
    1713     There are two styles of inlining here.  When the same bit of code is
    1714     wanted for the inline as for the library version, then __GMP_FORCE_foo
    1715     arranges for that code to be emitted and the __GMP_EXTERN_INLINE
    1716     directive suppressed, eg. mpz_fits_uint_p.  When a different bit of code
    1717     is wanted for the inline than for the library version, then
    1718     __GMP_FORCE_foo arranges the inline to be suppressed, eg. mpz_abs.  */
    1719  
    1720  #if defined (__GMP_EXTERN_INLINE) && ! defined (__GMP_FORCE_mpz_abs)
    1721  __GMP_EXTERN_INLINE void
    1722  mpz_abs (mpz_ptr __gmp_w, mpz_srcptr __gmp_u)
    1723  {
    1724    if (__gmp_w != __gmp_u)
    1725      mpz_set (__gmp_w, __gmp_u);
    1726    __gmp_w->_mp_size = __GMP_ABS (__gmp_w->_mp_size);
    1727  }
    1728  #endif
    1729  
    1730  #if GMP_NAIL_BITS == 0
    1731  #define __GMPZ_FITS_UTYPE_P(z,maxval)					\
    1732    mp_size_t  __gmp_n = z->_mp_size;					\
    1733    mp_ptr  __gmp_p = z->_mp_d;						\
    1734    return (__gmp_n == 0 || (__gmp_n == 1 && __gmp_p[0] <= maxval));
    1735  #else
    1736  #define __GMPZ_FITS_UTYPE_P(z,maxval)					\
    1737    mp_size_t  __gmp_n = z->_mp_size;					\
    1738    mp_ptr  __gmp_p = z->_mp_d;						\
    1739    return (__gmp_n == 0 || (__gmp_n == 1 && __gmp_p[0] <= maxval)	\
    1740  	  || (__gmp_n == 2 && __gmp_p[1] <= ((mp_limb_t) maxval >> GMP_NUMB_BITS)));
    1741  #endif
    1742  
    1743  #if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpz_fits_uint_p)
    1744  #if ! defined (__GMP_FORCE_mpz_fits_uint_p)
    1745  __GMP_EXTERN_INLINE
    1746  #endif
    1747  int
    1748  mpz_fits_uint_p (mpz_srcptr __gmp_z) __GMP_NOTHROW
    1749  {
    1750    __GMPZ_FITS_UTYPE_P (__gmp_z, UINT_MAX);
    1751  }
    1752  #endif
    1753  
    1754  #if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpz_fits_ulong_p)
    1755  #if ! defined (__GMP_FORCE_mpz_fits_ulong_p)
    1756  __GMP_EXTERN_INLINE
    1757  #endif
    1758  int
    1759  mpz_fits_ulong_p (mpz_srcptr __gmp_z) __GMP_NOTHROW
    1760  {
    1761    __GMPZ_FITS_UTYPE_P (__gmp_z, ULONG_MAX);
    1762  }
    1763  #endif
    1764  
    1765  #if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpz_fits_ushort_p)
    1766  #if ! defined (__GMP_FORCE_mpz_fits_ushort_p)
    1767  __GMP_EXTERN_INLINE
    1768  #endif
    1769  int
    1770  mpz_fits_ushort_p (mpz_srcptr __gmp_z) __GMP_NOTHROW
    1771  {
    1772    __GMPZ_FITS_UTYPE_P (__gmp_z, USHRT_MAX);
    1773  }
    1774  #endif
    1775  
    1776  #if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpz_get_ui)
    1777  #if ! defined (__GMP_FORCE_mpz_get_ui)
    1778  __GMP_EXTERN_INLINE
    1779  #endif
    1780  unsigned long
    1781  mpz_get_ui (mpz_srcptr __gmp_z) __GMP_NOTHROW
    1782  {
    1783    mp_ptr __gmp_p = __gmp_z->_mp_d;
    1784    mp_size_t __gmp_n = __gmp_z->_mp_size;
    1785    mp_limb_t __gmp_l = __gmp_p[0];
    1786    /* This is a "#if" rather than a plain "if" so as to avoid gcc warnings
    1787       about "<< GMP_NUMB_BITS" exceeding the type size, and to avoid Borland
    1788       C++ 6.0 warnings about condition always true for something like
    1789       "ULONG_MAX < GMP_NUMB_MASK".  */
    1790  #if GMP_NAIL_BITS == 0 || defined (_LONG_LONG_LIMB)
    1791    /* limb==long and no nails, or limb==longlong, one limb is enough */
    1792    return (__gmp_n != 0 ? __gmp_l : 0);
    1793  #else
    1794    /* limb==long and nails, need two limbs when available */
    1795    __gmp_n = __GMP_ABS (__gmp_n);
    1796    if (__gmp_n <= 1)
    1797      return (__gmp_n != 0 ? __gmp_l : 0);
    1798    else
    1799      return __gmp_l + (__gmp_p[1] << GMP_NUMB_BITS);
    1800  #endif
    1801  }
    1802  #endif
    1803  
    1804  #if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpz_getlimbn)
    1805  #if ! defined (__GMP_FORCE_mpz_getlimbn)
    1806  __GMP_EXTERN_INLINE
    1807  #endif
    1808  mp_limb_t
    1809  mpz_getlimbn (mpz_srcptr __gmp_z, mp_size_t __gmp_n) __GMP_NOTHROW
    1810  {
    1811    mp_limb_t  __gmp_result = 0;
    1812    if (__GMP_LIKELY (__gmp_n >= 0 && __gmp_n < __GMP_ABS (__gmp_z->_mp_size)))
    1813      __gmp_result = __gmp_z->_mp_d[__gmp_n];
    1814    return __gmp_result;
    1815  }
    1816  #endif
    1817  
    1818  #if defined (__GMP_EXTERN_INLINE) && ! defined (__GMP_FORCE_mpz_neg)
    1819  __GMP_EXTERN_INLINE void
    1820  mpz_neg (mpz_ptr __gmp_w, mpz_srcptr __gmp_u)
    1821  {
    1822    if (__gmp_w != __gmp_u)
    1823      mpz_set (__gmp_w, __gmp_u);
    1824    __gmp_w->_mp_size = - __gmp_w->_mp_size;
    1825  }
    1826  #endif
    1827  
    1828  #if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpz_perfect_square_p)
    1829  #if ! defined (__GMP_FORCE_mpz_perfect_square_p)
    1830  __GMP_EXTERN_INLINE
    1831  #endif
    1832  int
    1833  mpz_perfect_square_p (mpz_srcptr __gmp_a)
    1834  {
    1835    mp_size_t __gmp_asize;
    1836    int       __gmp_result;
    1837  
    1838    __gmp_asize = __gmp_a->_mp_size;
    1839    __gmp_result = (__gmp_asize >= 0);  /* zero is a square, negatives are not */
    1840    if (__GMP_LIKELY (__gmp_asize > 0))
    1841      __gmp_result = mpn_perfect_square_p (__gmp_a->_mp_d, __gmp_asize);
    1842    return __gmp_result;
    1843  }
    1844  #endif
    1845  
    1846  #if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpz_popcount)
    1847  #if ! defined (__GMP_FORCE_mpz_popcount)
    1848  __GMP_EXTERN_INLINE
    1849  #endif
    1850  mp_bitcnt_t
    1851  mpz_popcount (mpz_srcptr __gmp_u) __GMP_NOTHROW
    1852  {
    1853    mp_size_t      __gmp_usize;
    1854    mp_bitcnt_t    __gmp_result;
    1855  
    1856    __gmp_usize = __gmp_u->_mp_size;
    1857    __gmp_result = (__gmp_usize < 0 ? ~ __GMP_CAST (mp_bitcnt_t, 0) : __GMP_CAST (mp_bitcnt_t, 0));
    1858    if (__GMP_LIKELY (__gmp_usize > 0))
    1859      __gmp_result =  mpn_popcount (__gmp_u->_mp_d, __gmp_usize);
    1860    return __gmp_result;
    1861  }
    1862  #endif
    1863  
    1864  #if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpz_set_q)
    1865  #if ! defined (__GMP_FORCE_mpz_set_q)
    1866  __GMP_EXTERN_INLINE
    1867  #endif
    1868  void
    1869  mpz_set_q (mpz_ptr __gmp_w, mpq_srcptr __gmp_u)
    1870  {
    1871    mpz_tdiv_q (__gmp_w, mpq_numref (__gmp_u), mpq_denref (__gmp_u));
    1872  }
    1873  #endif
    1874  
    1875  #if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpz_size)
    1876  #if ! defined (__GMP_FORCE_mpz_size)
    1877  __GMP_EXTERN_INLINE
    1878  #endif
    1879  size_t
    1880  mpz_size (mpz_srcptr __gmp_z) __GMP_NOTHROW
    1881  {
    1882    return __GMP_ABS (__gmp_z->_mp_size);
    1883  }
    1884  #endif
    1885  
    1886  
    1887  /**************** mpq inlines ****************/
    1888  
    1889  #if defined (__GMP_EXTERN_INLINE) && ! defined (__GMP_FORCE_mpq_abs)
    1890  __GMP_EXTERN_INLINE void
    1891  mpq_abs (mpq_ptr __gmp_w, mpq_srcptr __gmp_u)
    1892  {
    1893    if (__gmp_w != __gmp_u)
    1894      mpq_set (__gmp_w, __gmp_u);
    1895    __gmp_w->_mp_num._mp_size = __GMP_ABS (__gmp_w->_mp_num._mp_size);
    1896  }
    1897  #endif
    1898  
    1899  #if defined (__GMP_EXTERN_INLINE) && ! defined (__GMP_FORCE_mpq_neg)
    1900  __GMP_EXTERN_INLINE void
    1901  mpq_neg (mpq_ptr __gmp_w, mpq_srcptr __gmp_u)
    1902  {
    1903    if (__gmp_w != __gmp_u)
    1904      mpq_set (__gmp_w, __gmp_u);
    1905    __gmp_w->_mp_num._mp_size = - __gmp_w->_mp_num._mp_size;
    1906  }
    1907  #endif
    1908  
    1909  
    1910  /**************** mpn inlines ****************/
    1911  
    1912  /* The comments with __GMPN_ADD_1 below apply here too.
    1913  
    1914     The test for FUNCTION returning 0 should predict well.  If it's assumed
    1915     {yp,ysize} will usually have a random number of bits then the high limb
    1916     won't be full and a carry out will occur a good deal less than 50% of the
    1917     time.
    1918  
    1919     ysize==0 isn't a documented feature, but is used internally in a few
    1920     places.
    1921  
    1922     Producing cout last stops it using up a register during the main part of
    1923     the calculation, though gcc (as of 3.0) on an "if (mpn_add (...))"
    1924     doesn't seem able to move the true and false legs of the conditional up
    1925     to the two places cout is generated.  */
    1926  
    1927  #define __GMPN_AORS(cout, wp, xp, xsize, yp, ysize, FUNCTION, TEST)     \
    1928    do {                                                                  \
    1929      mp_size_t  __gmp_i;                                                 \
    1930      mp_limb_t  __gmp_x;                                                 \
    1931                                                                          \
    1932      /* ASSERT ((ysize) >= 0); */                                        \
    1933      /* ASSERT ((xsize) >= (ysize)); */                                  \
    1934      /* ASSERT (MPN_SAME_OR_SEPARATE2_P (wp, xsize, xp, xsize)); */      \
    1935      /* ASSERT (MPN_SAME_OR_SEPARATE2_P (wp, xsize, yp, ysize)); */      \
    1936                                                                          \
    1937      __gmp_i = (ysize);                                                  \
    1938      if (__gmp_i != 0)                                                   \
    1939        {                                                                 \
    1940          if (FUNCTION (wp, xp, yp, __gmp_i))                             \
    1941            {                                                             \
    1942              do                                                          \
    1943                {                                                         \
    1944                  if (__gmp_i >= (xsize))                                 \
    1945                    {                                                     \
    1946                      (cout) = 1;                                         \
    1947                      goto __gmp_done;                                    \
    1948                    }                                                     \
    1949                  __gmp_x = (xp)[__gmp_i];                                \
    1950                }                                                         \
    1951              while (TEST);                                               \
    1952            }                                                             \
    1953        }                                                                 \
    1954      if ((wp) != (xp))                                                   \
    1955        __GMPN_COPY_REST (wp, xp, xsize, __gmp_i);                        \
    1956      (cout) = 0;                                                         \
    1957    __gmp_done:                                                           \
    1958      ;                                                                   \
    1959    } while (0)
    1960  
    1961  #define __GMPN_ADD(cout, wp, xp, xsize, yp, ysize)              \
    1962    __GMPN_AORS (cout, wp, xp, xsize, yp, ysize, mpn_add_n,       \
    1963                 (((wp)[__gmp_i++] = (__gmp_x + 1) & GMP_NUMB_MASK) == 0))
    1964  #define __GMPN_SUB(cout, wp, xp, xsize, yp, ysize)              \
    1965    __GMPN_AORS (cout, wp, xp, xsize, yp, ysize, mpn_sub_n,       \
    1966                 (((wp)[__gmp_i++] = (__gmp_x - 1) & GMP_NUMB_MASK), __gmp_x == 0))
    1967  
    1968  
    1969  /* The use of __gmp_i indexing is designed to ensure a compile time src==dst
    1970     remains nice and clear to the compiler, so that __GMPN_COPY_REST can
    1971     disappear, and the load/add/store gets a chance to become a
    1972     read-modify-write on CISC CPUs.
    1973  
    1974     Alternatives:
    1975  
    1976     Using a pair of pointers instead of indexing would be possible, but gcc
    1977     isn't able to recognise compile-time src==dst in that case, even when the
    1978     pointers are incremented more or less together.  Other compilers would
    1979     very likely have similar difficulty.
    1980  
    1981     gcc could use "if (__builtin_constant_p(src==dst) && src==dst)" or
    1982     similar to detect a compile-time src==dst.  This works nicely on gcc
    1983     2.95.x, it's not good on gcc 3.0 where __builtin_constant_p(p==p) seems
    1984     to be always false, for a pointer p.  But the current code form seems
    1985     good enough for src==dst anyway.
    1986  
    1987     gcc on x86 as usual doesn't give particularly good flags handling for the
    1988     carry/borrow detection.  It's tempting to want some multi instruction asm
    1989     blocks to help it, and this was tried, but in truth there's only a few
    1990     instructions to save and any gain is all too easily lost by register
    1991     juggling setting up for the asm.  */
    1992  
    1993  #if GMP_NAIL_BITS == 0
    1994  #define __GMPN_AORS_1(cout, dst, src, n, v, OP, CB)		\
    1995    do {								\
    1996      mp_size_t  __gmp_i;						\
    1997      mp_limb_t  __gmp_x, __gmp_r;                                \
    1998  								\
    1999      /* ASSERT ((n) >= 1); */					\
    2000      /* ASSERT (MPN_SAME_OR_SEPARATE_P (dst, src, n)); */	\
    2001  								\
    2002      __gmp_x = (src)[0];						\
    2003      __gmp_r = __gmp_x OP (v);                                   \
    2004      (dst)[0] = __gmp_r;						\
    2005      if (CB (__gmp_r, __gmp_x, (v)))                             \
    2006        {								\
    2007  	(cout) = 1;						\
    2008  	for (__gmp_i = 1; __gmp_i < (n);)                       \
    2009  	  {							\
    2010  	    __gmp_x = (src)[__gmp_i];                           \
    2011  	    __gmp_r = __gmp_x OP 1;                             \
    2012  	    (dst)[__gmp_i] = __gmp_r;                           \
    2013  	    ++__gmp_i;						\
    2014  	    if (!CB (__gmp_r, __gmp_x, 1))                      \
    2015  	      {							\
    2016  		if ((src) != (dst))				\
    2017  		  __GMPN_COPY_REST (dst, src, n, __gmp_i);      \
    2018  		(cout) = 0;					\
    2019  		break;						\
    2020  	      }							\
    2021  	  }							\
    2022        }								\
    2023      else							\
    2024        {								\
    2025  	if ((src) != (dst))					\
    2026  	  __GMPN_COPY_REST (dst, src, n, 1);			\
    2027  	(cout) = 0;						\
    2028        }								\
    2029    } while (0)
    2030  #endif
    2031  
    2032  #if GMP_NAIL_BITS >= 1
    2033  #define __GMPN_AORS_1(cout, dst, src, n, v, OP, CB)		\
    2034    do {								\
    2035      mp_size_t  __gmp_i;						\
    2036      mp_limb_t  __gmp_x, __gmp_r;				\
    2037  								\
    2038      /* ASSERT ((n) >= 1); */					\
    2039      /* ASSERT (MPN_SAME_OR_SEPARATE_P (dst, src, n)); */	\
    2040  								\
    2041      __gmp_x = (src)[0];						\
    2042      __gmp_r = __gmp_x OP (v);					\
    2043      (dst)[0] = __gmp_r & GMP_NUMB_MASK;				\
    2044      if (__gmp_r >> GMP_NUMB_BITS != 0)				\
    2045        {								\
    2046  	(cout) = 1;						\
    2047  	for (__gmp_i = 1; __gmp_i < (n);)			\
    2048  	  {							\
    2049  	    __gmp_x = (src)[__gmp_i];				\
    2050  	    __gmp_r = __gmp_x OP 1;				\
    2051  	    (dst)[__gmp_i] = __gmp_r & GMP_NUMB_MASK;		\
    2052  	    ++__gmp_i;						\
    2053  	    if (__gmp_r >> GMP_NUMB_BITS == 0)			\
    2054  	      {							\
    2055  		if ((src) != (dst))				\
    2056  		  __GMPN_COPY_REST (dst, src, n, __gmp_i);	\
    2057  		(cout) = 0;					\
    2058  		break;						\
    2059  	      }							\
    2060  	  }							\
    2061        }								\
    2062      else							\
    2063        {								\
    2064  	if ((src) != (dst))					\
    2065  	  __GMPN_COPY_REST (dst, src, n, 1);			\
    2066  	(cout) = 0;						\
    2067        }								\
    2068    } while (0)
    2069  #endif
    2070  
    2071  #define __GMPN_ADDCB(r,x,y) ((r) < (y))
    2072  #define __GMPN_SUBCB(r,x,y) ((x) < (y))
    2073  
    2074  #define __GMPN_ADD_1(cout, dst, src, n, v)	     \
    2075    __GMPN_AORS_1(cout, dst, src, n, v, +, __GMPN_ADDCB)
    2076  #define __GMPN_SUB_1(cout, dst, src, n, v)	     \
    2077    __GMPN_AORS_1(cout, dst, src, n, v, -, __GMPN_SUBCB)
    2078  
    2079  
    2080  /* Compare {xp,size} and {yp,size}, setting "result" to positive, zero or
    2081     negative.  size==0 is allowed.  On random data usually only one limb will
    2082     need to be examined to get a result, so it's worth having it inline.  */
    2083  #define __GMPN_CMP(result, xp, yp, size)                                \
    2084    do {                                                                  \
    2085      mp_size_t  __gmp_i;                                                 \
    2086      mp_limb_t  __gmp_x, __gmp_y;                                        \
    2087                                                                          \
    2088      /* ASSERT ((size) >= 0); */                                         \
    2089                                                                          \
    2090      (result) = 0;                                                       \
    2091      __gmp_i = (size);                                                   \
    2092      while (--__gmp_i >= 0)                                              \
    2093        {                                                                 \
    2094          __gmp_x = (xp)[__gmp_i];                                        \
    2095          __gmp_y = (yp)[__gmp_i];                                        \
    2096          if (__gmp_x != __gmp_y)                                         \
    2097            {                                                             \
    2098              /* Cannot use __gmp_x - __gmp_y, may overflow an "int" */   \
    2099              (result) = (__gmp_x > __gmp_y ? 1 : -1);                    \
    2100              break;                                                      \
    2101            }                                                             \
    2102        }                                                                 \
    2103    } while (0)
    2104  
    2105  
    2106  #if defined (__GMPN_COPY) && ! defined (__GMPN_COPY_REST)
    2107  #define __GMPN_COPY_REST(dst, src, size, start)                 \
    2108    do {                                                          \
    2109      /* ASSERT ((start) >= 0); */                                \
    2110      /* ASSERT ((start) <= (size)); */                           \
    2111      __GMPN_COPY ((dst)+(start), (src)+(start), (size)-(start)); \
    2112    } while (0)
    2113  #endif
    2114  
    2115  /* Copy {src,size} to {dst,size}, starting at "start".  This is designed to
    2116     keep the indexing dst[j] and src[j] nice and simple for __GMPN_ADD_1,
    2117     __GMPN_ADD, etc.  */
    2118  #if ! defined (__GMPN_COPY_REST)
    2119  #define __GMPN_COPY_REST(dst, src, size, start)                 \
    2120    do {                                                          \
    2121      mp_size_t __gmp_j;                                          \
    2122      /* ASSERT ((size) >= 0); */                                 \
    2123      /* ASSERT ((start) >= 0); */                                \
    2124      /* ASSERT ((start) <= (size)); */                           \
    2125      /* ASSERT (MPN_SAME_OR_SEPARATE_P (dst, src, size)); */     \
    2126      __GMP_CRAY_Pragma ("_CRI ivdep");                           \
    2127      for (__gmp_j = (start); __gmp_j < (size); __gmp_j++)        \
    2128        (dst)[__gmp_j] = (src)[__gmp_j];                          \
    2129    } while (0)
    2130  #endif
    2131  
    2132  /* Enhancement: Use some of the smarter code from gmp-impl.h.  Maybe use
    2133     mpn_copyi if there's a native version, and if we don't mind demanding
    2134     binary compatibility for it (on targets which use it).  */
    2135  
    2136  #if ! defined (__GMPN_COPY)
    2137  #define __GMPN_COPY(dst, src, size)   __GMPN_COPY_REST (dst, src, size, 0)
    2138  #endif
    2139  
    2140  
    2141  #if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpn_add)
    2142  #if ! defined (__GMP_FORCE_mpn_add)
    2143  __GMP_EXTERN_INLINE
    2144  #endif
    2145  mp_limb_t
    2146  mpn_add (mp_ptr __gmp_wp, mp_srcptr __gmp_xp, mp_size_t __gmp_xsize, mp_srcptr __gmp_yp, mp_size_t __gmp_ysize)
    2147  {
    2148    mp_limb_t  __gmp_c;
    2149    __GMPN_ADD (__gmp_c, __gmp_wp, __gmp_xp, __gmp_xsize, __gmp_yp, __gmp_ysize);
    2150    return __gmp_c;
    2151  }
    2152  #endif
    2153  
    2154  #if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpn_add_1)
    2155  #if ! defined (__GMP_FORCE_mpn_add_1)
    2156  __GMP_EXTERN_INLINE
    2157  #endif
    2158  mp_limb_t
    2159  mpn_add_1 (mp_ptr __gmp_dst, mp_srcptr __gmp_src, mp_size_t __gmp_size, mp_limb_t __gmp_n) __GMP_NOTHROW
    2160  {
    2161    mp_limb_t  __gmp_c;
    2162    __GMPN_ADD_1 (__gmp_c, __gmp_dst, __gmp_src, __gmp_size, __gmp_n);
    2163    return __gmp_c;
    2164  }
    2165  #endif
    2166  
    2167  #if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpn_cmp)
    2168  #if ! defined (__GMP_FORCE_mpn_cmp)
    2169  __GMP_EXTERN_INLINE
    2170  #endif
    2171  int
    2172  mpn_cmp (mp_srcptr __gmp_xp, mp_srcptr __gmp_yp, mp_size_t __gmp_size) __GMP_NOTHROW
    2173  {
    2174    int __gmp_result;
    2175    __GMPN_CMP (__gmp_result, __gmp_xp, __gmp_yp, __gmp_size);
    2176    return __gmp_result;
    2177  }
    2178  #endif
    2179  
    2180  #if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpn_zero_p)
    2181  #if ! defined (__GMP_FORCE_mpn_zero_p)
    2182  __GMP_EXTERN_INLINE
    2183  #endif
    2184  int
    2185  mpn_zero_p (mp_srcptr __gmp_p, mp_size_t __gmp_n) __GMP_NOTHROW
    2186  {
    2187    /* if (__GMP_LIKELY (__gmp_n > 0)) */
    2188      do {
    2189        if (__gmp_p[--__gmp_n] != 0)
    2190  	return 0;
    2191      } while (__gmp_n != 0);
    2192    return 1;
    2193  }
    2194  #endif
    2195  
    2196  #if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpn_sub)
    2197  #if ! defined (__GMP_FORCE_mpn_sub)
    2198  __GMP_EXTERN_INLINE
    2199  #endif
    2200  mp_limb_t
    2201  mpn_sub (mp_ptr __gmp_wp, mp_srcptr __gmp_xp, mp_size_t __gmp_xsize, mp_srcptr __gmp_yp, mp_size_t __gmp_ysize)
    2202  {
    2203    mp_limb_t  __gmp_c;
    2204    __GMPN_SUB (__gmp_c, __gmp_wp, __gmp_xp, __gmp_xsize, __gmp_yp, __gmp_ysize);
    2205    return __gmp_c;
    2206  }
    2207  #endif
    2208  
    2209  #if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpn_sub_1)
    2210  #if ! defined (__GMP_FORCE_mpn_sub_1)
    2211  __GMP_EXTERN_INLINE
    2212  #endif
    2213  mp_limb_t
    2214  mpn_sub_1 (mp_ptr __gmp_dst, mp_srcptr __gmp_src, mp_size_t __gmp_size, mp_limb_t __gmp_n) __GMP_NOTHROW
    2215  {
    2216    mp_limb_t  __gmp_c;
    2217    __GMPN_SUB_1 (__gmp_c, __gmp_dst, __gmp_src, __gmp_size, __gmp_n);
    2218    return __gmp_c;
    2219  }
    2220  #endif
    2221  
    2222  #if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpn_neg)
    2223  #if ! defined (__GMP_FORCE_mpn_neg)
    2224  __GMP_EXTERN_INLINE
    2225  #endif
    2226  mp_limb_t
    2227  mpn_neg (mp_ptr __gmp_rp, mp_srcptr __gmp_up, mp_size_t __gmp_n)
    2228  {
    2229    while (*__gmp_up == 0) /* Low zero limbs are unchanged by negation. */
    2230      {
    2231        *__gmp_rp = 0;
    2232        if (!--__gmp_n) /* All zero */
    2233  	return 0;
    2234        ++__gmp_up; ++__gmp_rp;
    2235      }
    2236  
    2237    *__gmp_rp = (- *__gmp_up) & GMP_NUMB_MASK;
    2238  
    2239    if (--__gmp_n) /* Higher limbs get complemented. */
    2240      mpn_com (++__gmp_rp, ++__gmp_up, __gmp_n);
    2241  
    2242    return 1;
    2243  }
    2244  #endif
    2245  
    2246  #if defined (__cplusplus)
    2247  }
    2248  #endif
    2249  
    2250  
    2251  /* Allow faster testing for negative, zero, and positive.  */
    2252  #define mpz_sgn(Z) ((Z)->_mp_size < 0 ? -1 : (Z)->_mp_size > 0)
    2253  #define mpf_sgn(F) ((F)->_mp_size < 0 ? -1 : (F)->_mp_size > 0)
    2254  #define mpq_sgn(Q) ((Q)->_mp_num._mp_size < 0 ? -1 : (Q)->_mp_num._mp_size > 0)
    2255  
    2256  /* When using GCC, optimize certain common comparisons.  */
    2257  #if defined (__GNUC__) && __GNUC__ >= 2
    2258  #define mpz_cmp_ui(Z,UI) \
    2259    (__builtin_constant_p (UI) && (UI) == 0				\
    2260     ? mpz_sgn (Z) : _mpz_cmp_ui (Z,UI))
    2261  #define mpz_cmp_si(Z,SI)						\
    2262    (__builtin_constant_p ((SI) >= 0) && (SI) >= 0			\
    2263     ? mpz_cmp_ui (Z, __GMP_CAST (unsigned long, SI))			\
    2264     : _mpz_cmp_si (Z,SI))
    2265  #define mpq_cmp_ui(Q,NUI,DUI)					\
    2266    (__builtin_constant_p (NUI) && (NUI) == 0 ? mpq_sgn (Q)	\
    2267     : __builtin_constant_p ((NUI) == (DUI)) && (NUI) == (DUI)	\
    2268     ? mpz_cmp (mpq_numref (Q), mpq_denref (Q))			\
    2269     : _mpq_cmp_ui (Q,NUI,DUI))
    2270  #define mpq_cmp_si(q,n,d)				\
    2271    (__builtin_constant_p ((n) >= 0) && (n) >= 0		\
    2272     ? mpq_cmp_ui (q, __GMP_CAST (unsigned long, n), d)	\
    2273     : _mpq_cmp_si (q, n, d))
    2274  #else
    2275  #define mpz_cmp_ui(Z,UI) _mpz_cmp_ui (Z,UI)
    2276  #define mpz_cmp_si(Z,UI) _mpz_cmp_si (Z,UI)
    2277  #define mpq_cmp_ui(Q,NUI,DUI) _mpq_cmp_ui (Q,NUI,DUI)
    2278  #define mpq_cmp_si(q,n,d)  _mpq_cmp_si(q,n,d)
    2279  #endif
    2280  
    2281  
    2282  /* Using "&" rather than "&&" means these can come out branch-free.  Every
    2283     mpz_t has at least one limb allocated, so fetching the low limb is always
    2284     allowed.  */
    2285  #define mpz_odd_p(z)   (((z)->_mp_size != 0) & __GMP_CAST (int, (z)->_mp_d[0]))
    2286  #define mpz_even_p(z)  (! mpz_odd_p (z))
    2287  
    2288  
    2289  /**************** C++ routines ****************/
    2290  
    2291  #ifdef __cplusplus
    2292  __GMP_DECLSPEC_XX std::ostream& operator<< (std::ostream &, mpz_srcptr);
    2293  __GMP_DECLSPEC_XX std::ostream& operator<< (std::ostream &, mpq_srcptr);
    2294  __GMP_DECLSPEC_XX std::ostream& operator<< (std::ostream &, mpf_srcptr);
    2295  __GMP_DECLSPEC_XX std::istream& operator>> (std::istream &, mpz_ptr);
    2296  __GMP_DECLSPEC_XX std::istream& operator>> (std::istream &, mpq_ptr);
    2297  __GMP_DECLSPEC_XX std::istream& operator>> (std::istream &, mpf_ptr);
    2298  #endif
    2299  
    2300  
    2301  /* Source-level compatibility with GMP 2 and earlier. */
    2302  #define mpn_divmod(qp,np,nsize,dp,dsize) \
    2303    mpn_divrem (qp, __GMP_CAST (mp_size_t, 0), np, nsize, dp, dsize)
    2304  
    2305  /* Source-level compatibility with GMP 1.  */
    2306  #define mpz_mdiv	mpz_fdiv_q
    2307  #define mpz_mdivmod	mpz_fdiv_qr
    2308  #define mpz_mmod	mpz_fdiv_r
    2309  #define mpz_mdiv_ui	mpz_fdiv_q_ui
    2310  #define mpz_mdivmod_ui(q,r,n,d) \
    2311    (((r) == 0) ? mpz_fdiv_q_ui (q,n,d) : mpz_fdiv_qr_ui (q,r,n,d))
    2312  #define mpz_mmod_ui(r,n,d) \
    2313    (((r) == 0) ? mpz_fdiv_ui (n,d) : mpz_fdiv_r_ui (r,n,d))
    2314  
    2315  /* Useful synonyms, but not quite compatible with GMP 1.  */
    2316  #define mpz_div		mpz_fdiv_q
    2317  #define mpz_divmod	mpz_fdiv_qr
    2318  #define mpz_div_ui	mpz_fdiv_q_ui
    2319  #define mpz_divmod_ui	mpz_fdiv_qr_ui
    2320  #define mpz_div_2exp	mpz_fdiv_q_2exp
    2321  #define mpz_mod_2exp	mpz_fdiv_r_2exp
    2322  
    2323  enum
    2324  {
    2325    GMP_ERROR_NONE = 0,
    2326    GMP_ERROR_UNSUPPORTED_ARGUMENT = 1,
    2327    GMP_ERROR_DIVISION_BY_ZERO = 2,
    2328    GMP_ERROR_SQRT_OF_NEGATIVE = 4,
    2329    GMP_ERROR_INVALID_ARGUMENT = 8,
    2330    GMP_ERROR_MPZ_OVERFLOW = 16
    2331  };
    2332  
    2333  /* Define CC and CFLAGS which were used to build this version of GMP */
    2334  #define __GMP_CC "gcc"
    2335  #define __GMP_CFLAGS "-O2 -pedantic -fomit-frame-pointer -m64 -mtune=znver2 -march=znver2"
    2336  
    2337  /* Major version number is the value of __GNU_MP__ too, above. */
    2338  #define __GNU_MP_VERSION            6
    2339  #define __GNU_MP_VERSION_MINOR      3
    2340  #define __GNU_MP_VERSION_PATCHLEVEL 0
    2341  #define __GNU_MP_RELEASE (__GNU_MP_VERSION * 10000 + __GNU_MP_VERSION_MINOR * 100 + __GNU_MP_VERSION_PATCHLEVEL)
    2342  
    2343  #define __GMP_H__
    2344  #endif /* __GMP_H__ */