LCOV - code coverage report
Current view: top level - usr/include - gmp-x86_64.h (source / functions) Hit Total Coverage
Test: GnuTLS-3.6.14 Code Coverage Lines: 10 13 76.9 %
Date: 2020-10-30 04:50:48 Functions: 0 0 -
Legend: Lines: hit not hit

          Line data    Source code
       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   0
      42             : #define __GMP_HAVE_HOST_CPU_FAMILY_powerpc 0
      43             : #define GMP_LIMB_BITS                      64
      44             : #define GMP_NAIL_BITS                      0
      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             : /* #undef _LONG_LONG_LIMB */
      61             : #define __GMP_LIBGMP_DLL  0
      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       13093 : mpz_size (mpz_srcptr __gmp_z) __GMP_NOTHROW
    1867             : {
    1868       13093 :   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           0 : 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           0 :   mp_limb_t  __gmp_c;
    2148           0 :   __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        7664 : mpn_cmp (mp_srcptr __gmp_xp, mp_srcptr __gmp_yp, mp_size_t __gmp_size) __GMP_NOTHROW
    2159             : {
    2160        7664 :   int __gmp_result;
    2161       12864 :   __GMPN_CMP (__gmp_result, __gmp_xp, __gmp_yp, __gmp_size);
    2162        1085 :   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        4386 : mpn_zero_p (mp_srcptr __gmp_p, mp_size_t __gmp_n) __GMP_NOTHROW
    2172             : {
    2173             :   /* if (__GMP_LIKELY (__gmp_n > 0)) */
    2174        4840 :     do {
    2175        4840 :       if (__gmp_p[--__gmp_n] != 0)
    2176             :         return 0;
    2177         454 :     } 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 "gcc"
    2320             : #define __GMP_CFLAGS "-O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection"
    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__ */

Generated by: LCOV version 1.14