[BACK]Return to gmp-h.in CVS log [TXT][DIR] Up to [local] / OpenXM_contrib / gmp

Annotation of OpenXM_contrib/gmp/gmp-h.in, Revision 1.1.1.1

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

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>