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