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