github.com/aergoio/aergo@v1.3.1/libtool/src/gmp-6.1.2/gmp-h.in (about)

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