LCOV - code coverage report
Current view: top level - usr/include - gmp-x86_64.h (source / functions) Hit Total Coverage
Test: GnuTLS-3.6.8 Code Coverage Lines: 6 9 66.7 %
Date: 2019-07-21 03:10:42 Functions: 0 0 -
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 13 30 43.3 %

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

Generated by: LCOV version 1.13