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