PHP  
 PHP: Test and Code Coverage Analysis
downloads | QA | documentation | faq | getting help | mailing lists | reporting bugs | php.net sites | links | my php.net 
 

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

Generated by: LCOV version 1.10

Generated at Sun, 21 Sep 2014 15:27:29 +0000 (2 days ago)

Copyright © 2005-2014 The PHP Group
All rights reserved.