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