[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

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>