[BACK]Return to gmp.h CVS log [TXT][DIR] Up to [local] / OpenXM / src / kan96xx / gmp-2.0.2-ssh-2

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>