[BACK]Return to gmp.h CVS log [TXT][DIR] Up to [local] / OpenXM_contrib / gmp

Annotation of OpenXM_contrib/gmp/gmp.h, Revision 1.1.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>