/[gcl]/gcl/h/gmp.h
ViewVC logotype

Diff of /gcl/h/gmp.h

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

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

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.2

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26