Annotation of OpenXM/src/kan96xx/gmp-2.0.2/gmp.h, Revision 1.1
1.1 ! maekawa 1: /* gmp.h -- Definitions for GNU multiple precision functions.
! 2:
! 3: Copyright (C) 1991, 1993, 1994, 1995, 1996 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 the GNU Library General Public License as published by
! 9: the Free Software Foundation; either version 2 of the License, or (at your
! 10: option) any later version.
! 11:
! 12: The GNU MP Library is distributed in the hope that it will be useful, but
! 13: WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
! 14: or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
! 15: License for more details.
! 16:
! 17: You should have received a copy of the GNU Library General Public License
! 18: along with the GNU MP Library; see the file COPYING.LIB. If not, write to
! 19: the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
! 20: MA 02111-1307, USA. */
! 21:
! 22: #ifndef __GMP_H__
! 23:
! 24: #ifndef __GNU_MP__
! 25: #define __GNU_MP__ 2
! 26: #define __need_size_t
! 27: #include <stddef.h>
! 28: #undef __need_size_t
! 29:
! 30: #if defined (__STDC__) || defined (__cplusplus)
! 31: #define __gmp_const const
! 32: #else
! 33: #define __gmp_const
! 34: #endif
! 35:
! 36: #if defined (__GNUC__)
! 37: #define __gmp_inline __inline__
! 38: #else
! 39: #define __gmp_inline
! 40: #endif
! 41:
! 42: #ifndef _EXTERN_INLINE
! 43: #ifdef __GNUC__
! 44: #define _EXTERN_INLINE extern __inline__
! 45: #else
! 46: #define _EXTERN_INLINE static
! 47: #endif
! 48: #endif
! 49:
! 50: #ifdef _SHORT_LIMB
! 51: typedef unsigned int mp_limb_t;
! 52: typedef int mp_limb_signed_t;
! 53: #else
! 54: #ifdef _LONG_LONG_LIMB
! 55: typedef unsigned long long int mp_limb_t;
! 56: typedef long long int mp_limb_signed_t;
! 57: #else
! 58: typedef unsigned long int mp_limb_t;
! 59: typedef long int mp_limb_signed_t;
! 60: #endif
! 61: #endif
! 62:
! 63: typedef mp_limb_t * mp_ptr;
! 64: typedef __gmp_const mp_limb_t * mp_srcptr;
! 65: typedef long int mp_size_t;
! 66: typedef long int mp_exp_t;
! 67:
! 68: #ifndef __MP_SMALL__
! 69: typedef struct
! 70: {
! 71: int _mp_alloc; /* Number of *limbs* allocated and pointed
! 72: to by the D field. */
! 73: int _mp_size; /* abs(SIZE) is the number of limbs
! 74: the last field points to. If SIZE
! 75: is negative this is a negative
! 76: number. */
! 77: mp_limb_t *_mp_d; /* Pointer to the limbs. */
! 78: } __mpz_struct;
! 79: #else
! 80: typedef struct
! 81: {
! 82: short int _mp_alloc; /* Number of *limbs* allocated and pointed
! 83: to by the D field. */
! 84: short int _mp_size; /* abs(SIZE) is the number of limbs
! 85: the last field points to. If SIZE
! 86: is negative this is a negative
! 87: number. */
! 88: mp_limb_t *_mp_d; /* Pointer to the limbs. */
! 89: } __mpz_struct;
! 90: #endif
! 91: #endif /* __GNU_MP__ */
! 92:
! 93: /* User-visible types. */
! 94: typedef __mpz_struct MP_INT;
! 95: typedef __mpz_struct mpz_t[1];
! 96:
! 97: /* Structure for rational numbers. Zero is represented as 0/any, i.e.
! 98: the denominator is ignored. Negative numbers have the sign in
! 99: the numerator. */
! 100: typedef struct
! 101: {
! 102: __mpz_struct _mp_num;
! 103: __mpz_struct _mp_den;
! 104: #if 0
! 105: int _mp_num_alloc; /* Number of limbs allocated
! 106: for the numerator. */
! 107: int _mp_num_size; /* The absolute value of this field is the
! 108: length of the numerator; the sign is the
! 109: sign of the entire rational number. */
! 110: mp_ptr _mp_num; /* Pointer to the numerator limbs. */
! 111: int _mp_den_alloc; /* Number of limbs allocated
! 112: for the denominator. */
! 113: int _mp_den_size; /* Length of the denominator. (This field
! 114: should always be positive.) */
! 115: mp_ptr _mp_den; /* Pointer to the denominator limbs. */
! 116: #endif
! 117: } __mpq_struct;
! 118:
! 119: typedef __mpq_struct MP_RAT;
! 120: typedef __mpq_struct mpq_t[1];
! 121:
! 122: typedef struct
! 123: {
! 124: int _mp_prec; /* Max precision, in number of `mp_limb_t's.
! 125: Set by mpf_init and modified by
! 126: mpf_set_prec. The area pointed to
! 127: by the `d' field contains `prec' + 1
! 128: limbs. */
! 129: int _mp_size; /* abs(SIZE) is the number of limbs
! 130: the last field points to. If SIZE
! 131: is negative this is a negative
! 132: number. */
! 133: mp_exp_t _mp_exp; /* Exponent, in the base of `mp_limb_t'. */
! 134: mp_limb_t *_mp_d; /* Pointer to the limbs. */
! 135: } __mpf_struct;
! 136:
! 137: /* typedef __mpf_struct MP_FLOAT; */
! 138: typedef __mpf_struct mpf_t[1];
! 139:
! 140: /* Types for function declarations in gmp files. */
! 141: /* ??? Should not pollute user name space with these ??? */
! 142: typedef __gmp_const __mpz_struct *mpz_srcptr;
! 143: typedef __mpz_struct *mpz_ptr;
! 144: typedef __gmp_const __mpf_struct *mpf_srcptr;
! 145: typedef __mpf_struct *mpf_ptr;
! 146: typedef __gmp_const __mpq_struct *mpq_srcptr;
! 147: typedef __mpq_struct *mpq_ptr;
! 148:
! 149: #ifndef _PROTO
! 150: #if defined (__STDC__) || defined (__cplusplus)
! 151: #define _PROTO(x) x
! 152: #else
! 153: #define _PROTO(x) ()
! 154: #endif
! 155: #endif
! 156:
! 157: #ifndef __MPN
! 158: #if defined (__STDC__) || defined (__cplusplus)
! 159: #define __MPN(x) __mpn_##x
! 160: #else
! 161: #define __MPN(x) __mpn_/**/x
! 162: #endif
! 163: #endif
! 164:
! 165: #if defined (FILE) || defined (H_STDIO) || defined (_H_STDIO) \
! 166: || defined (_STDIO_H) || defined (_STDIO_H_) || defined (__STDIO_H__) \
! 167: || defined (_STDIO_INCLUDED)
! 168: #define _GMP_H_HAVE_FILE 1
! 169: #endif
! 170:
! 171: void mp_set_memory_functions _PROTO ((void *(*) (size_t),
! 172: void *(*) (void *, size_t, size_t),
! 173: void (*) (void *, size_t)));
! 174: extern __gmp_const int mp_bits_per_limb;
! 175:
! 176: /**************** Integer (i.e. Z) routines. ****************/
! 177:
! 178: #if defined (__cplusplus)
! 179: extern "C" {
! 180: #endif
! 181: void *_mpz_realloc _PROTO ((mpz_ptr, mp_size_t));
! 182:
! 183: void mpz_abs _PROTO ((mpz_ptr, mpz_srcptr));
! 184: void mpz_add _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
! 185: void mpz_add_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
! 186: void mpz_and _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
! 187: void mpz_array_init _PROTO ((mpz_ptr, mp_size_t, mp_size_t));
! 188: void mpz_cdiv_q _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
! 189: unsigned long int mpz_cdiv_q_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
! 190: void mpz_cdiv_qr _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr));
! 191: unsigned long int mpz_cdiv_qr_ui _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long int));
! 192: void mpz_cdiv_r _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
! 193: unsigned long int mpz_cdiv_r_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
! 194: unsigned long int mpz_cdiv_ui _PROTO ((mpz_srcptr, unsigned long int));
! 195: void mpz_clear _PROTO ((mpz_ptr));
! 196: void mpz_clrbit _PROTO ((mpz_ptr, unsigned long int));
! 197: int mpz_cmp _PROTO ((mpz_srcptr, mpz_srcptr));
! 198: int mpz_cmp_si _PROTO ((mpz_srcptr, signed long int));
! 199: int mpz_cmp_ui _PROTO ((mpz_srcptr, unsigned long int));
! 200: void mpz_com _PROTO ((mpz_ptr, mpz_srcptr));
! 201: void mpz_divexact _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
! 202: void mpz_fac_ui _PROTO ((mpz_ptr, unsigned long int));
! 203: void mpz_fdiv_q _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
! 204: void mpz_fdiv_q_2exp _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
! 205: unsigned long int mpz_fdiv_q_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
! 206: void mpz_fdiv_qr _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr));
! 207: unsigned long int mpz_fdiv_qr_ui _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long int));
! 208: void mpz_fdiv_r _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
! 209: void mpz_fdiv_r_2exp _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
! 210: unsigned long int mpz_fdiv_r_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
! 211: unsigned long int mpz_fdiv_ui _PROTO ((mpz_srcptr, unsigned long int));
! 212: void mpz_gcd _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
! 213: unsigned long int mpz_gcd_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
! 214: void mpz_gcdext _PROTO ((mpz_ptr, mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr));
! 215: double mpz_get_d _PROTO ((mpz_srcptr));
! 216: /* signed */ long int mpz_get_si _PROTO ((mpz_srcptr));
! 217: char *mpz_get_str _PROTO ((char *, int, mpz_srcptr));
! 218: unsigned long int mpz_get_ui _PROTO ((mpz_srcptr));
! 219: mp_limb_t mpz_getlimbn _PROTO ((mpz_srcptr, mp_size_t));
! 220: unsigned long int mpz_hamdist _PROTO ((mpz_srcptr, mpz_srcptr));
! 221: void mpz_init _PROTO ((mpz_ptr));
! 222: #ifdef _GMP_H_HAVE_FILE
! 223: size_t mpz_inp_binary _PROTO ((mpz_ptr, FILE *));
! 224: size_t mpz_inp_raw _PROTO ((mpz_ptr, FILE *));
! 225: size_t mpz_inp_str _PROTO ((mpz_ptr, FILE *, int));
! 226: #endif
! 227: void mpz_init_set _PROTO ((mpz_ptr, mpz_srcptr));
! 228: void mpz_init_set_d _PROTO ((mpz_ptr, double));
! 229: void mpz_init_set_si _PROTO ((mpz_ptr, signed long int));
! 230: int mpz_init_set_str _PROTO ((mpz_ptr, const char *, int));
! 231: void mpz_init_set_ui _PROTO ((mpz_ptr, unsigned long int));
! 232: int mpz_invert _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
! 233: void mpz_ior _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
! 234: int mpz_jacobi _PROTO ((mpz_srcptr, mpz_srcptr));
! 235: int mpz_legendre _PROTO ((mpz_srcptr, mpz_srcptr));
! 236: void mpz_mod _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
! 237: void mpz_mul _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
! 238: void mpz_mul_2exp _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
! 239: void mpz_mul_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
! 240: void mpz_neg _PROTO ((mpz_ptr, mpz_srcptr));
! 241: #ifdef _GMP_H_HAVE_FILE
! 242: size_t mpz_out_binary _PROTO ((FILE *, mpz_srcptr));
! 243: size_t mpz_out_raw _PROTO ((FILE *, mpz_srcptr));
! 244: size_t mpz_out_str _PROTO ((FILE *, int, mpz_srcptr));
! 245: #endif
! 246: int mpz_perfect_square_p _PROTO ((mpz_srcptr));
! 247: unsigned long int mpz_popcount _PROTO ((mpz_srcptr));
! 248: void mpz_pow_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
! 249: void mpz_powm _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr, mpz_srcptr));
! 250: void mpz_powm_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int, mpz_srcptr));
! 251: int mpz_probab_prime_p _PROTO ((mpz_srcptr, int));
! 252: void mpz_random _PROTO ((mpz_ptr, mp_size_t));
! 253: void mpz_random2 _PROTO ((mpz_ptr, mp_size_t));
! 254: unsigned long int mpz_scan0 _PROTO ((mpz_srcptr, unsigned long int));
! 255: unsigned long int mpz_scan1 _PROTO ((mpz_srcptr, unsigned long int));
! 256: void mpz_set _PROTO ((mpz_ptr, mpz_srcptr));
! 257: void mpz_set_d _PROTO ((mpz_ptr, double));
! 258: void mpz_set_f _PROTO ((mpz_ptr, mpf_srcptr));
! 259: void mpz_set_q _PROTO ((mpz_ptr, mpq_srcptr));
! 260: void mpz_set_si _PROTO ((mpz_ptr, signed long int));
! 261: int mpz_set_str _PROTO ((mpz_ptr, const char *, int));
! 262: void mpz_set_ui _PROTO ((mpz_ptr, unsigned long int));
! 263: void mpz_setbit _PROTO ((mpz_ptr, unsigned long int));
! 264: size_t mpz_size _PROTO ((mpz_srcptr));
! 265: size_t mpz_sizeinbase _PROTO ((mpz_srcptr, int));
! 266: void mpz_sqrt _PROTO ((mpz_ptr, mpz_srcptr));
! 267: void mpz_sqrtrem _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr));
! 268: void mpz_sub _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
! 269: void mpz_sub_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
! 270: void mpz_tdiv_q _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
! 271: void mpz_tdiv_q_2exp _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
! 272: void mpz_tdiv_q_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
! 273: void mpz_tdiv_qr _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr));
! 274: void mpz_tdiv_qr_ui _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long int));
! 275: void mpz_tdiv_r _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
! 276: void mpz_tdiv_r_2exp _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
! 277: void mpz_tdiv_r_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
! 278: void mpz_ui_pow_ui _PROTO ((mpz_ptr, unsigned long int, unsigned long int));
! 279:
! 280: /**************** Rational (i.e. Q) routines. ****************/
! 281:
! 282: void mpq_init _PROTO ((mpq_ptr));
! 283: void mpq_clear _PROTO ((mpq_ptr));
! 284: void mpq_set _PROTO ((mpq_ptr, mpq_srcptr));
! 285: void mpq_set_ui _PROTO ((mpq_ptr, unsigned long int, unsigned long int));
! 286: void mpq_set_si _PROTO ((mpq_ptr, signed long int, unsigned long int));
! 287: void mpq_set_z _PROTO ((mpq_ptr, mpz_srcptr));
! 288: void mpq_add _PROTO ((mpq_ptr, mpq_srcptr, mpq_srcptr));
! 289: void mpq_sub _PROTO ((mpq_ptr, mpq_srcptr, mpq_srcptr));
! 290: void mpq_mul _PROTO ((mpq_ptr, mpq_srcptr, mpq_srcptr));
! 291: void mpq_div _PROTO ((mpq_ptr, mpq_srcptr, mpq_srcptr));
! 292: void mpq_neg _PROTO ((mpq_ptr, mpq_srcptr));
! 293: int mpq_cmp _PROTO ((mpq_srcptr, mpq_srcptr));
! 294: int mpq_cmp_ui _PROTO ((mpq_srcptr, unsigned long int, unsigned long int));
! 295: int mpq_equal _PROTO ((mpq_srcptr, mpq_srcptr));
! 296: void mpq_inv _PROTO ((mpq_ptr, mpq_srcptr));
! 297: void mpq_set_num _PROTO ((mpq_ptr, mpz_srcptr));
! 298: void mpq_set_den _PROTO ((mpq_ptr, mpz_srcptr));
! 299: void mpq_get_num _PROTO ((mpz_ptr, mpq_srcptr));
! 300: void mpq_get_den _PROTO ((mpz_ptr, mpq_srcptr));
! 301: double mpq_get_d _PROTO ((mpq_srcptr));
! 302: void mpq_canonicalize _PROTO ((mpq_ptr));
! 303:
! 304: /**************** Float (i.e. F) routines. ****************/
! 305:
! 306: void mpf_abs _PROTO ((mpf_ptr, mpf_srcptr));
! 307: void mpf_add _PROTO ((mpf_ptr, mpf_srcptr, mpf_srcptr));
! 308: void mpf_add_ui _PROTO ((mpf_ptr, mpf_srcptr, unsigned long int));
! 309: void mpf_clear _PROTO ((mpf_ptr));
! 310: int mpf_cmp _PROTO ((mpf_srcptr, mpf_srcptr));
! 311: int mpf_cmp_si _PROTO ((mpf_srcptr, signed long int));
! 312: int mpf_cmp_ui _PROTO ((mpf_srcptr, unsigned long int));
! 313: void mpf_div _PROTO ((mpf_ptr, mpf_srcptr, mpf_srcptr));
! 314: void mpf_div_2exp _PROTO ((mpf_ptr, mpf_srcptr, unsigned long int));
! 315: void mpf_div_ui _PROTO ((mpf_ptr, mpf_srcptr, unsigned long int));
! 316: void mpf_dump _PROTO ((mpf_srcptr));
! 317: int mpf_eq _PROTO ((mpf_srcptr, mpf_srcptr, unsigned long int));
! 318: double mpf_get_d _PROTO ((mpf_srcptr));
! 319: unsigned long int mpf_get_prec _PROTO ((mpf_srcptr));
! 320: char *mpf_get_str _PROTO ((char *, mp_exp_t *, int, size_t, mpf_srcptr));
! 321: void mpf_init _PROTO ((mpf_ptr));
! 322: void mpf_init2 _PROTO ((mpf_ptr, unsigned long int));
! 323: #ifdef _GMP_H_HAVE_FILE
! 324: size_t mpf_inp_str _PROTO ((mpf_ptr, FILE *, int));
! 325: #endif
! 326: void mpf_init_set _PROTO ((mpf_ptr, mpf_srcptr));
! 327: void mpf_init_set_d _PROTO ((mpf_ptr, double));
! 328: void mpf_init_set_si _PROTO ((mpf_ptr, signed long int));
! 329: int mpf_init_set_str _PROTO ((mpf_ptr, const char *, int));
! 330: void mpf_init_set_ui _PROTO ((mpf_ptr, unsigned long int));
! 331: void mpf_mul _PROTO ((mpf_ptr, mpf_srcptr, mpf_srcptr));
! 332: void mpf_mul_2exp _PROTO ((mpf_ptr, mpf_srcptr, unsigned long int));
! 333: void mpf_mul_ui _PROTO ((mpf_ptr, mpf_srcptr, unsigned long int));
! 334: void mpf_neg _PROTO ((mpf_ptr, mpf_srcptr));
! 335: #ifdef _GMP_H_HAVE_FILE
! 336: size_t mpf_out_str _PROTO ((FILE *, int, size_t, mpf_srcptr));
! 337: #endif
! 338: void mpf_random2 _PROTO ((mpf_ptr, mp_size_t, mp_exp_t));
! 339: void mpf_reldiff _PROTO ((mpf_ptr, mpf_srcptr, mpf_srcptr));
! 340: void mpf_set _PROTO ((mpf_ptr, mpf_srcptr));
! 341: void mpf_set_d _PROTO ((mpf_ptr, double));
! 342: void mpf_set_default_prec _PROTO ((unsigned long int));
! 343: void mpf_set_prec _PROTO ((mpf_ptr, unsigned long int));
! 344: void mpf_set_prec_raw _PROTO ((mpf_ptr, unsigned long int));
! 345: void mpf_set_q _PROTO ((mpf_ptr, mpq_srcptr));
! 346: void mpf_set_si _PROTO ((mpf_ptr, signed long int));
! 347: int mpf_set_str _PROTO ((mpf_ptr, const char *, int));
! 348: void mpf_set_ui _PROTO ((mpf_ptr, unsigned long int));
! 349: void mpf_set_z _PROTO ((mpf_ptr, mpz_srcptr));
! 350: size_t mpf_size _PROTO ((mpf_srcptr));
! 351: void mpf_sqrt _PROTO ((mpf_ptr, mpf_srcptr));
! 352: void mpf_sqrt_ui _PROTO ((mpf_ptr, unsigned long int));
! 353: void mpf_sub _PROTO ((mpf_ptr, mpf_srcptr, mpf_srcptr));
! 354: void mpf_sub_ui _PROTO ((mpf_ptr, mpf_srcptr, unsigned long int));
! 355: void mpf_ui_div _PROTO ((mpf_ptr, unsigned long int, mpf_srcptr));
! 356: void mpf_ui_sub _PROTO ((mpf_ptr, unsigned long int, mpf_srcptr));
! 357: #if defined (__cplusplus)
! 358: }
! 359: #endif
! 360: /************ Low level positive-integer (i.e. N) routines. ************/
! 361:
! 362: /* This is ugly, but we need to make usr calls reach the prefixed function. */
! 363: #define mpn_add __MPN(add)
! 364: #define mpn_add_1 __MPN(add_1)
! 365: #define mpn_add_n __MPN(add_n)
! 366: #define mpn_addmul_1 __MPN(addmul_1)
! 367: #define mpn_bdivmod __MPN(bdivmod)
! 368: #define mpn_cmp __MPN(cmp)
! 369: #define mpn_divmod_1 __MPN(divmod_1)
! 370: #define mpn_divrem __MPN(divrem)
! 371: #define mpn_divrem_1 __MPN(divrem_1)
! 372: #define mpn_dump __MPN(dump)
! 373: #define mpn_gcd __MPN(gcd)
! 374: #define mpn_gcd_1 __MPN(gcd_1)
! 375: #define mpn_gcdext __MPN(gcdext)
! 376: #define mpn_get_str __MPN(get_str)
! 377: #define mpn_hamdist __MPN(hamdist)
! 378: #define mpn_lshift __MPN(lshift)
! 379: #define mpn_mod_1 __MPN(mod_1)
! 380: #define mpn_mul __MPN(mul)
! 381: #define mpn_mul_1 __MPN(mul_1)
! 382: #define mpn_mul_n __MPN(mul_n)
! 383: #define mpn_perfect_square_p __MPN(perfect_square_p)
! 384: #define mpn_popcount __MPN(popcount)
! 385: #define mpn_preinv_mod_1 __MPN(preinv_mod_1)
! 386: #define mpn_random2 __MPN(random2)
! 387: #define mpn_rshift __MPN(rshift)
! 388: #define mpn_scan0 __MPN(scan0)
! 389: #define mpn_scan1 __MPN(scan1)
! 390: #define mpn_set_str __MPN(set_str)
! 391: #define mpn_sqrtrem __MPN(sqrtrem)
! 392: #define mpn_sub __MPN(sub)
! 393: #define mpn_sub_1 __MPN(sub_1)
! 394: #define mpn_sub_n __MPN(sub_n)
! 395: #define mpn_submul_1 __MPN(submul_1)
! 396: #define mpn_udiv_w_sdiv __MPN(udiv_w_sdiv)
! 397:
! 398: #if defined (__cplusplus)
! 399: extern "C" {
! 400: #endif
! 401: mp_limb_t mpn_add _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_srcptr,mp_size_t));
! 402: mp_limb_t mpn_add_1 _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t));
! 403: mp_limb_t mpn_add_n _PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t));
! 404: mp_limb_t mpn_addmul_1 _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t));
! 405: mp_limb_t mpn_bdivmod _PROTO ((mp_ptr, mp_ptr, mp_size_t, mp_srcptr, mp_size_t, unsigned long int));
! 406: int mpn_cmp _PROTO ((mp_srcptr, mp_srcptr, mp_size_t));
! 407: mp_limb_t mpn_divmod_1 _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t));
! 408: mp_limb_t mpn_divrem _PROTO ((mp_ptr, mp_size_t, mp_ptr, mp_size_t, mp_srcptr, mp_size_t));
! 409: mp_limb_t mpn_divrem_1 _PROTO ((mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_limb_t));
! 410: void mpn_dump _PROTO ((mp_srcptr, mp_size_t));
! 411: mp_size_t mpn_gcd _PROTO ((mp_ptr, mp_ptr, mp_size_t, mp_ptr, mp_size_t));
! 412: mp_limb_t mpn_gcd_1 _PROTO ((mp_srcptr, mp_size_t, mp_limb_t));
! 413: mp_size_t mpn_gcdext _PROTO ((mp_ptr, mp_ptr, mp_ptr, mp_size_t, mp_ptr, mp_size_t));
! 414: size_t mpn_get_str _PROTO ((unsigned char *, int, mp_ptr, mp_size_t));
! 415: unsigned long int mpn_hamdist _PROTO ((mp_srcptr, mp_srcptr, mp_size_t));
! 416: mp_limb_t mpn_lshift _PROTO ((mp_ptr, mp_srcptr, mp_size_t, unsigned int));
! 417: mp_limb_t mpn_mod_1 _PROTO ((mp_srcptr, mp_size_t, mp_limb_t));
! 418: mp_limb_t mpn_mul _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t));
! 419: mp_limb_t mpn_mul_1 _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t));
! 420: void mpn_mul_n _PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t));
! 421: int mpn_perfect_square_p _PROTO ((mp_srcptr, mp_size_t));
! 422: unsigned long int mpn_popcount _PROTO ((mp_srcptr, mp_size_t));
! 423: mp_limb_t mpn_preinv_mod_1 _PROTO ((mp_srcptr, mp_size_t, mp_limb_t, mp_limb_t));
! 424: void mpn_random2 _PROTO ((mp_ptr, mp_size_t));
! 425: mp_limb_t mpn_rshift _PROTO ((mp_ptr, mp_srcptr, mp_size_t, unsigned int));
! 426: unsigned long int mpn_scan0 _PROTO ((mp_srcptr, unsigned long int));
! 427: unsigned long int mpn_scan1 _PROTO ((mp_srcptr, unsigned long int));
! 428: mp_size_t mpn_set_str _PROTO ((mp_ptr, const unsigned char *, size_t, int));
! 429: mp_size_t mpn_sqrtrem _PROTO ((mp_ptr, mp_ptr, mp_srcptr, mp_size_t));
! 430: mp_limb_t mpn_sub _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_srcptr,mp_size_t));
! 431: mp_limb_t mpn_sub_1 _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t));
! 432: mp_limb_t mpn_sub_n _PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t));
! 433: mp_limb_t mpn_submul_1 _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t));
! 434: #if defined (__cplusplus)
! 435: }
! 436: #endif
! 437:
! 438: #if defined (__GNUC__) || defined (_FORCE_INLINES)
! 439: _EXTERN_INLINE mp_limb_t
! 440: #if defined (__STDC__) || defined (__cplusplus)
! 441: mpn_add_1 (register mp_ptr res_ptr,
! 442: register mp_srcptr s1_ptr,
! 443: register mp_size_t s1_size,
! 444: register mp_limb_t s2_limb)
! 445: #else
! 446: mpn_add_1 (res_ptr, s1_ptr, s1_size, s2_limb)
! 447: register mp_ptr res_ptr;
! 448: register mp_srcptr s1_ptr;
! 449: register mp_size_t s1_size;
! 450: register mp_limb_t s2_limb;
! 451: #endif
! 452: {
! 453: register mp_limb_t x;
! 454:
! 455: x = *s1_ptr++;
! 456: s2_limb = x + s2_limb;
! 457: *res_ptr++ = s2_limb;
! 458: if (s2_limb < x)
! 459: {
! 460: while (--s1_size != 0)
! 461: {
! 462: x = *s1_ptr++ + 1;
! 463: *res_ptr++ = x;
! 464: if (x != 0)
! 465: goto fin;
! 466: }
! 467:
! 468: return 1;
! 469: }
! 470:
! 471: fin:
! 472: if (res_ptr != s1_ptr)
! 473: {
! 474: mp_size_t i;
! 475: for (i = 0; i < s1_size - 1; i++)
! 476: res_ptr[i] = s1_ptr[i];
! 477: }
! 478: return 0;
! 479: }
! 480:
! 481: _EXTERN_INLINE mp_limb_t
! 482: #if defined (__STDC__) || defined (__cplusplus)
! 483: mpn_add (register mp_ptr res_ptr,
! 484: register mp_srcptr s1_ptr,
! 485: register mp_size_t s1_size,
! 486: register mp_srcptr s2_ptr,
! 487: register mp_size_t s2_size)
! 488: #else
! 489: mpn_add (res_ptr, s1_ptr, s1_size, s2_ptr, s2_size)
! 490: register mp_ptr res_ptr;
! 491: register mp_srcptr s1_ptr;
! 492: register mp_size_t s1_size;
! 493: register mp_srcptr s2_ptr;
! 494: register mp_size_t s2_size;
! 495: #endif
! 496: {
! 497: mp_limb_t cy_limb = 0;
! 498:
! 499: if (s2_size != 0)
! 500: cy_limb = mpn_add_n (res_ptr, s1_ptr, s2_ptr, s2_size);
! 501:
! 502: if (s1_size - s2_size != 0)
! 503: cy_limb = mpn_add_1 (res_ptr + s2_size,
! 504: s1_ptr + s2_size,
! 505: s1_size - s2_size,
! 506: cy_limb);
! 507: return cy_limb;
! 508: }
! 509:
! 510: _EXTERN_INLINE mp_limb_t
! 511: #if defined (__STDC__) || defined (__cplusplus)
! 512: mpn_sub_1 (register mp_ptr res_ptr,
! 513: register mp_srcptr s1_ptr,
! 514: register mp_size_t s1_size,
! 515: register mp_limb_t s2_limb)
! 516: #else
! 517: mpn_sub_1 (res_ptr, s1_ptr, s1_size, s2_limb)
! 518: register mp_ptr res_ptr;
! 519: register mp_srcptr s1_ptr;
! 520: register mp_size_t s1_size;
! 521: register mp_limb_t s2_limb;
! 522: #endif
! 523: {
! 524: register mp_limb_t x;
! 525:
! 526: x = *s1_ptr++;
! 527: s2_limb = x - s2_limb;
! 528: *res_ptr++ = s2_limb;
! 529: if (s2_limb > x)
! 530: {
! 531: while (--s1_size != 0)
! 532: {
! 533: x = *s1_ptr++;
! 534: *res_ptr++ = x - 1;
! 535: if (x != 0)
! 536: goto fin;
! 537: }
! 538:
! 539: return 1;
! 540: }
! 541:
! 542: fin:
! 543: if (res_ptr != s1_ptr)
! 544: {
! 545: mp_size_t i;
! 546: for (i = 0; i < s1_size - 1; i++)
! 547: res_ptr[i] = s1_ptr[i];
! 548: }
! 549: return 0;
! 550: }
! 551:
! 552: _EXTERN_INLINE mp_limb_t
! 553: #if defined (__STDC__) || defined (__cplusplus)
! 554: mpn_sub (register mp_ptr res_ptr,
! 555: register mp_srcptr s1_ptr,
! 556: register mp_size_t s1_size,
! 557: register mp_srcptr s2_ptr,
! 558: register mp_size_t s2_size)
! 559: #else
! 560: mpn_sub (res_ptr, s1_ptr, s1_size, s2_ptr, s2_size)
! 561: register mp_ptr res_ptr;
! 562: register mp_srcptr s1_ptr;
! 563: register mp_size_t s1_size;
! 564: register mp_srcptr s2_ptr;
! 565: register mp_size_t s2_size;
! 566: #endif
! 567: {
! 568: mp_limb_t cy_limb = 0;
! 569:
! 570: if (s2_size != 0)
! 571: cy_limb = mpn_sub_n (res_ptr, s1_ptr, s2_ptr, s2_size);
! 572:
! 573: if (s1_size - s2_size != 0)
! 574: cy_limb = mpn_sub_1 (res_ptr + s2_size,
! 575: s1_ptr + s2_size,
! 576: s1_size - s2_size,
! 577: cy_limb);
! 578: return cy_limb;
! 579: }
! 580: #endif /* __GNUC__ */
! 581:
! 582: /* Allow faster testing for negative, zero, and positive. */
! 583: #define mpz_sgn(Z) ((Z)->_mp_size < 0 ? -1 : (Z)->_mp_size > 0)
! 584: #define mpf_sgn(F) ((F)->_mp_size < 0 ? -1 : (F)->_mp_size > 0)
! 585: #define mpq_sgn(Q) ((Q)->_mp_num._mp_size < 0 ? -1 : (Q)->_mp_num._mp_size > 0)
! 586:
! 587: /* Allow direct user access to numerator and denominator of a mpq_t object. */
! 588: #define mpq_numref(Q) (&((Q)->_mp_num))
! 589: #define mpq_denref(Q) (&((Q)->_mp_den))
! 590:
! 591: /* When using GCC, optimize certain common comparisons. */
! 592: #if defined (__GNUC__)
! 593: #define mpz_cmp_ui(Z,UI) \
! 594: (__builtin_constant_p (UI) && (UI) == 0 \
! 595: ? mpz_sgn (Z) : mpz_cmp_ui (Z,UI))
! 596: #define mpz_cmp_si(Z,UI) \
! 597: (__builtin_constant_p (UI) && (UI) == 0 ? mpz_sgn (Z) \
! 598: : __builtin_constant_p (UI) && (UI) > 0 ? mpz_cmp_ui (Z,UI) \
! 599: : mpz_cmp_si (Z,UI))
! 600: #define mpq_cmp_ui(Q,NUI,DUI) \
! 601: (__builtin_constant_p (NUI) && (NUI) == 0 \
! 602: ? mpq_sgn (Q) : mpq_cmp_ui (Q,NUI,DUI))
! 603: #endif
! 604:
! 605: #define mpn_divmod(qp,np,nsize,dp,dsize) mpn_divrem (qp,0,np,nsize,dp,dsize)
! 606: #if 0
! 607: #define mpn_divmod_1(qp,np,nsize,dlimb) mpn_divrem_1 (qp,0,np,nsize,dlimb)
! 608: #endif
! 609:
! 610: /* Compatibility with GMP 1. */
! 611: #define mpz_mdiv mpz_fdiv_q
! 612: #define mpz_mdivmod mpz_fdiv_qr
! 613: #define mpz_mmod mpz_fdiv_r
! 614: #define mpz_mdiv_ui mpz_fdiv_q_ui
! 615: #define mpz_mdivmod_ui(q,r,n,d) \
! 616: ((r == 0) ? mpz_fdiv_q_ui (q,n,d) : mpz_fdiv_qr_ui (q,r,n,d))
! 617: #define mpz_mmod_ui(r,n,d) \
! 618: ((r == 0) ? mpz_fdiv_ui (n,d) : mpz_fdiv_r_ui (r,n,d))
! 619:
! 620: /* Useful synonyms, but not quite compatible with GMP 1. */
! 621: #define mpz_div mpz_fdiv_q
! 622: #define mpz_divmod mpz_fdiv_qr
! 623: #define mpz_div_ui mpz_fdiv_q_ui
! 624: #define mpz_divmod_ui mpz_fdiv_qr_ui
! 625: #define mpz_mod_ui mpz_fdiv_r_ui
! 626: #define mpz_div_2exp mpz_fdiv_q_2exp
! 627: #define mpz_mod_2exp mpz_fdiv_r_2exp
! 628:
! 629: #define __GNU_MP_VERSION 2
! 630: #define __GNU_MP_VERSION_MINOR 0
! 631: #define __GMP_H__
! 632: #endif /* __GMP_H__ */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>