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